my_data
是一个结构体,其中包含一个名为 name
的字段,而 data[]
是一个结构体数组,你需要对每个索引进行初始化。请阅读以下内容:
In a structure initializer, specify the name of a field to initialize with .fieldname ='
before the element value. For example, given the following structure,
struct point { int x, y; };
the following initialization
struct point p = { .y = yvalue, .x = xvalue };
is equivalent to
struct point p = { xvalue, yvalue };
Another syntax which has the same meaning, obsolete since GCC 2.5, is fieldname:'
, as shown here:
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方面的答案:
C代码中switch-case中的“…”是什么。
int a[2] = {0,0}
语法。所以你不知道的只有{.name = "foo"}
,这对我来说似乎是不言自明的! - Dave