char数组的大小大于传递给初始化它的元素数

时间:2017-11-16 23:03:03

标签: c arrays initialization c-strings initializer-list

对于int或double类型的数组,如果数组的大小大于初始化数组时提供的元素数(如列表),则数组中的其余元素默认为0对吗?

当我使用少于我提供的元素的元素初始化字符数组时会发生什么?像

char ch[10] = { 'h', 'e', 'l', 'l', 'o' };

其余元素是否分配了任何值?或者它只是内存中的垃圾?

1 个答案:

答案 0 :(得分:4)

此声明

char ch[10] = { 'h', 'e', 'l', 'l', 'o' };

等同于此声明

char ch[10] = { "hello" };

反过来相当于以下声明

char ch[10] = "hello";

并且所有这些声明都等同于以下声明

char ch[10] = { 'h', 'e', 'l', 'l', 'o', '\0', '\0', '\0', '\0', '\0', };

这是没有显式初始化器的数组元素被隐式零初始化。

从C标准(6.7.9初始化)

  

10如果未初始化具有自动存储持续时间的对象   显然,它的价值是不确定的。 如果有静态的对象   或线程存储持续时间未明确初始化,然后:

...

  

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

  

19初始化应在初始化程序列表顺序中进行,每个顺序   初始化程序为特定的子对象提供覆盖任何子对象   以前列出的同一子对象的初始值设定项; 151)全部   未初始化的子对象应初始化   隐含地与具有静态存储持续时间的对象相同。