このコードはどういう意味ですか?
struct foo_t {
int a;
int b;
} foo[10] = {{0,0}}
foo[0] は です{0,0}
が、残りはどうですか? C標準はこれをどのように処理しますか?
追加した。ここで網羅的な回答を作成しました。私の質問は削除されるべきだと思います。
このコードはどういう意味ですか?
struct foo_t {
int a;
int b;
} foo[10] = {{0,0}}
foo[0] は です{0,0}
が、残りはどうですか? C標準はこれをどのように処理しますか?
追加した。ここで網羅的な回答を作成しました。私の質問は削除されるべきだと思います。
a
配列全体は、との両方の値が 0 の構造体で初期化されますb
。これは、プリミティブ値を使用した次のケースに似ています。
int foo[10] = {0};
配列内のすべての整数は、値で初期化されます0
。
C99 標準では、次のように指定されています。
集合体の要素またはメンバーよりもブレースで囲まれたリスト内の初期化子が少ない場合、または配列内の要素よりも既知のサイズの配列を初期化するために使用される文字列リテラル内の文字が少ない場合、集合体の残りの部分は静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます。
通常、値 0 はリストの終わりを意味します。これは、そのようなリストを反復し、この値のおもちゃに遭遇すると、最後に到達したことを知ることを意味します. この広告を作った人は、頭の中でこんなことを考えているのではないでしょうか。コードを検索すると、リストに値を追加した後にゼロ値を設定するコードの断片が見つかる場合があります。