int array [30] = {0};这在c中是如何工作的?

时间:2015-10-05 11:29:25

标签: c arrays initialization

这是如何工作的(将所有值设置为0)?

int array[28]= {0};

以及为什么这不起作用(没有将所有值设置为4但只将第一个值设置为4而其他值设置为0)?

int array[28]= {4};

4 个答案:

答案 0 :(得分:10)

在C中,初始化程序中未列出的任何元素都被隐式初始化为零值。

int array[28]= {0};创建一个28个整数的数组,并将第一个元素初始化为0.初始化程序中未提及其余元素得到它们的零值,对于整数为0。

int array[28]= {4};同样有效。第一个元素初始化为4,初始化程序中未提及的其余元素得到零值。

答案 1 :(得分:10)

未初始化的元素设置为0.在第一种情况下,通过将值设置为0来启动它,并且默认情况下将rest初始化为0.在第二种情况下,第一个值初始化为4并且休息为0.标准说:

  

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

答案 2 :(得分:2)

仅仅因为标准要求它。

ISO / IEC:9899(c99标准)TC3声明:

  

6.7.8初始化

[...]

  

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

第10点的相同段落是什么: (强调我的)

  

10如果没有显式初始化具有自动存储持续时间的对象,则其值为   不定。 如果未明确初始化具有静态存储持续时间的对象,   然后

     

- 如果它有指针类型,则将其初始化为空指针;

     

- 如果它有算术类型,则初始化为(正或无符号)零;

     

- 如果是聚合,则根据这些规则初始化(递归)每个成员;

     

- 如果是联合,则根据这些规则初始化(递归)第一个命名成员。

所以简单地说这必须发生,这就是它发生的原因。

答案 3 :(得分:1)

int array[5] = {0}

所有元素都将初始化为0

int array[5] = {1,2,3}

在这种情况下,第一个元素将初始化为1,第二个元素为2,第三个元素为3,其余元素为0。