结构末尾的C数组初始化
我正在学习C,我对我遇到的这个结构感到困惑,但我认为它可能是简单地创建一个结构数组的简称结构末尾的C数组初始化,c,struct,C,Struct,我正在学习C,我对我遇到的这个结构感到困惑,但我认为它可能是简单地创建一个结构数组的简称 struct myStruct { char *name; int id; } myList[] = { {"bob", 1}, {"joe", 2} }; 与 struct myStruct { char *name; int id; }; struct myStruct myList[] = { {"bob", 1}, {"joe", 2} }; 还
struct myStruct
{
char *name;
int id;
} myList[] = {
{"bob", 1},
{"joe", 2}
};
与
struct myStruct
{
char *name;
int id;
};
struct myStruct myList[] = {
{"bob", 1},
{"joe", 2}
};
还是我错了?是的,是一样的。第一种语法在希望保持
结构的类型为匿名的情况下非常有用:
struct {
char *name;
int id;
} myList[] = {
{"bob", 1},
{"joe", 2}
};
对。它们是一样的。它类似于
int i = 1;
及
(“bob”,1)
是否与1
相同?否则,是的,它是等效的。但是不要忘记struct
定义后面的分号。对我来说,它不会在带有-std=c11
标志的gcc
上编译。这似乎不是标准的C。它很可能是{“bob”,1}
,而不是(“bob”,1)
。是的,对不起,用错误的括号键入了这段代码。起初我以为这段代码不会编译,因为它正在将const char*分配给char*,但它确实编译了。我现在很困惑,为什么我要这么做?@BarryBones41有时候你不需要结构的标记名——例如,当你从不在任何其他地方声明同一个结构时,struct
本身是文件的本地(即静态
)或声明它的函数的本地。
int i;
i = 1;