对于未由指定初始化程序命名的字段会发生什么?

在C99(而不是C ++)中,可以使用以下语法初始化结构:

struct info { char name[8+1]; int sz; int typ; }; struct info arr[] = { [0] = { .sz = 20, .name = "abc" }, [9] = { .sz = -1, .name = "" } }; 

未指定的字段会发生什么?

他们被归零了。 从C99标准§6.7.8(初始化)/ 21,

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同。