在C中对struct数组进行部分初始化时会发生什么?

时间:2012-10-27 17:05:42

标签: c coding-style

这段代码是什么意思?

struct foo_t {
    int a;
    int b;
} foo[10] = {{0,0}}

foo [0]是{0,0},但其余的呢? C标准如何处理这个问题?

ADDED。我找到了详尽的答案here。我想我的问题应该删除。

2 个答案:

答案 0 :(得分:8)

整个数组将使用ab的值为0的结构进行初始化。这与具有原始值的以下情况类似:

int foo[10] = {0};

数组中的每个整数都将使用值0初始化。

C99标准规定如下:

  

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

答案 1 :(得分:2)

值0通常表示列表的结尾。通过这个我的意思是当你迭代这样一个列表并且你遇到这个价值玩具知道你已经到达终点。我想,无论是谁在他的脑海里创造了这样的广告。如果您搜索代码,您可能会发现在列表中附加值后设置零值的代码片段。