结构末尾的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} }; 还

我正在学习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 {
    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;