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"
};
第二种和第三种形式可能很方便,因为您不需要按顺序编写,例如,上述所有示例都等效于:
my_data data[] = {
[3].name = "Mike",
[1].name = "James",
[0].name = "Peter",
[2].name = "John"
};
如果您的结构中有多个字段(例如,一个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对 switch case 的回答:What is "..." in switch-case in C code