14

C99 では、次のようにメンバー名を使用して構造体のメンバーを初期化できることを認識しています。

struct myStruct
{
 int i;
 char c;
 float f;
};

したがって、以下は有効です:

struct myStruct m = {.f = 10.11, .i = 5, .c = 'a'};

また、初期化されていないメンバーは に設定されると言われてい0ます。そう

struct myStruct m = {.f = 10.11, .c = 'a'};

ここiに設定されます0

ただし、次の場合:

struct myStruct m = {.f = 10.11, .c = 'a', 6}; 

iはまだ 0 に初期化されています。このような複合初期化を行う理由は何ですか。

4

3 に答える 3

0

ここで、6 は指定されていない初期化子です。したがって、この値は、前に指定された初期化子の直後のメンバー、つまり char の直後の float に初期化されます。

直列に 2 つ以上の指定されていない初期化子がある場合、指定されていない初期化子は、最後の指定された初期化子から直列のメンバーに初期化されます。

于 2014-08-19T16:07:05.547 に答える