对于int或double类型的数组,如果数组的大小大于初始化数组时提供的元素数(如列表),则数组中的其余元素默认为0对吗?
当我使用少于我提供的元素的元素初始化字符数组时会发生什么?像
char ch[10] = { 'h', 'e', 'l', 'l', 'o' };
其余元素是否分配了任何值?或者它只是内存中的垃圾?
答案 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)全部 未初始化的子对象应初始化 隐含地与具有静态存储持续时间的对象相同。