なぜ誰かがこれを行うでしょうか?これはどのように機能しますか?私はこれがどうにかして最初のメンバーだけが定義された3つの構造の配列を作成すると仮定していたでしょう。私はポインタが配列の最初の要素を指していることを理解しています、そして、これがどのように機能するのか見ていますが、どう定義されているのですか? (GCC 4.8.4)構造体の配列を初期化すると、単一の要素のすべてのメンバーが初期化されますが、なぜですか?
void do_something(const void *);
typedef struct{
int a;
char b;
int c;
} the_data_t;
int main(int argc, char *argv[])
{
the_data_t my_data[] = {10, 'a', 30};
do_something((const void *)my_data);
}
void do_something(const void *data)
{
printf("data a: %d\ndata b: %c\ndata c: %d\n", ((the_data_t*)data)->a,
((the_data_t*)data)->b, ((the_data_t*)data)->c);
}
出力
データ:10
データB:
データc:30
かかわらず、私はそれを変更しました。 。
int main(int argc, char *argv[])
{
the_data_t my_data = {10, 'a', 30};
do_something(&my_data);
}
実際のコードを表示する必要があります。補助関数は配列を扱うように設計されている可能性があります。したがって、配列に1つの要素が含まれている場合は、単一の構造ではなく配列として宣言する必要があります。 –
構造体の一部だけを初期化する方法はありません。すべてまたは何もありません。 – molbdnilo