構造体の初期化指定子は、中括弧で囲まれた、コンマで区切られた値のリストです。共用体の 場合、中括弧に入れられた単一の値です。初期化指定子の前には等号 (=) を付けます。
C99 では、共用体型または構造体型の 自動メンバー変数の初期化指定子は定数式または非定数式にすることができます。
union {
char birthday[9];
int age;
float weight;
} people = {"23/07/57"};
union {
char birthday[9];
int age;
float weight;
} people = { .age = 14 };
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
static struct address perm_address =
{ 3, "Savona Dr.", "Dundas", "Ontario", "L4B 2A1"};
perm_address の値は、次のとおりです。メンバー | 値 |
---|---|
perm_address.street_no | 3 |
perm_address.street_name | ストリング "Savona Dr." のアドレス |
perm_address.city | ストリング "Dundas" のアドレス |
perm_address.prov | ストリング "Ontario" のアドレス |
perm_address.postal_code | ストリング "L4B 2A1" のアドレス |
struct {
int a;
int :10;
int b;
} w = { 2, 3 };
構造体または共用体の全メンバーを初期化する必要はありません。初期化されていない構造体 メンバーの初期値は、その構造体変数または共用体変数に関連付けられたストレージ・クラスによ って異なります。静的と宣言された構造体では、初期化されないメンバーはすべて、該当の型のゼロに 暗黙的に初期化されます。自動ストレージが指定された構造体のメンバーは、デフォルトの初期化 は行われません。静的ストレージが指定された共用体のデフォルトの初期化指定子は、最初のコンポー ネントのデフォルトです。自動ストレージが指定された共用体は、デフォルトの初期化は行われません。
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
struct address temp_address =
{ 44, "Knyvet Ave.", "Hamilton", "Ontario" };
temp_address の値は、次のとおりです。メンバー | 値 |
---|---|
temp_address.street_no | 44 |
temp_address.street_name | ストリング "Knyvet Ave." のアドレス |
temp_address.city | ストリング "Hamilton" のアドレス |
temp_address.prov | ストリング "Ontario" のアドレス |
temp_address.postal_code | temp_address 変数のストレージ・クラスによって異なります。それが静的の場合、値は NULL になります。 |
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
struct address temp_address =
{ .city = "Hamilton", .prov = "Ontario" };