19

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

struct info
{
    char    name[8+1];
    int     sz;
    int     typ;
};

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

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

4

1 回答 1

29

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

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

于 2010-07-30T18:45:26.640 回答