my_data
name
フィールドとしての構造data[]
体であり、構造体の配列です。各インデックスを初期化しています。以下を読んでください:
.fieldname ='
構造体初期化子では、要素値の前に初期化するフィールドの名前を指定します。たとえば、次の構造があるとします。
struct point { int x, y; };
次の初期化
struct point p = { .y = yvalue, .x = xvalue };
と同等です
struct point p = { xvalue, yvalue };
GCC 2.5 以降廃止された、同じ意味を持つ別の構文は、次のとおりfieldname:'
です。
struct point p = { y: yvalue, x: xvalue };
次のように書くこともできます。
my_data data[] = {
{ .name = "Peter" },
{ .name = "James" },
{ .name = "John" },
{ .name = "Mike" }
};
なので:
my_data data[] = {
[0] = { .name = "Peter" },
[1] = { .name = "James" },
[2] = { .name = "John" },
[3] = { .name = "Mike" }
};
また:
my_data data[] = {
[0].name = "Peter",
[1].name = "James",
[2].name = "John",
[3].name = "Mike"
};
2 番目と 3 番目の形式は、順番に記述する必要がないため便利です。たとえば、上記の例はすべて次と同等です。
my_data data[] = {
[3].name = "Mike",
[1].name = "James",
[0].name = "Peter",
[2].name = "John"
};
構造体に複数のフィールドがある場合 (たとえば、 an int age
)、以下を使用して一度にすべてを初期化できます。
my_data data[] = {
[3].name = "Mike",
[2].age = 40,
[1].name = "James",
[3].age = 23,
[0].name = "Peter",
[2].name = "John"
};
配列の初期化を理解するには、奇妙な初期化式をお読みください。
さらに、スイッチ ケースに対する @ Shafik Yaghmourの回答もお読みください: What is “…” in switch-case in C code