…構造体属性のドット(.)を使った属性定義の意味が気になる…
初期化構文を使用して、構造体の特定の要素にアクセスできます{ }
。たとえば、次の構造体を考えてみましょう。
struct my_struct {
int field_1;
int field_2;
int field_3;
};
... 次のように初期化できます。
struct my_struct s1 = { 1, 2, 3 };
...または次のように:
struct my_struct s2 = { .field_1 = 1, .field_2 = 2, .field_3 = 3 };
... または、フィールドの順序がわからない場合 (または特定の順序で指定したい場合):
struct my_struct s3 = { .field_3 = 3, .field_1 = 1, .field_2 = 2 };
s1
...に相当する発言s2
は に相当しs3
ます。さらに、初期化でフィールドを指定しないと、ゼロになります。C99 標準 6.7.8.21から:
集合体の要素またはメンバーよりもブレースで囲まれたリスト内の初期化子が少ない場合、または配列内の要素よりも既知のサイズの配列を初期化するために使用される文字列リテラル内の文字が少ない場合、集合体の残りの部分は静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます。
...これを説明するには:
struct my_struct s4 = { .field_1 = 1 };
...これは、フィールド 2 と 3 をゼロで埋めるため、 をs4.field_2 == 0
意味しtrue
ます。