【问题标题】:Size of char array is bigger than number of elements passed to initialize it [duplicate]char数组的大小大于传递给它的初始化它的元素数[重复]
【发布时间】:2017-11-16 23:03:03
【问题描述】:

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

当我用比我提供的大小少的元素初始化字符数组时会发生什么?喜欢

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

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

【问题讨论】:

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


【解决方案1】:

此声明

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) 全部 未显式初始化的子对象应被初始化 与具有静态存储持续时间的对象隐式相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2014-10-27
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2021-12-15
    • 2019-04-10
    相关资源
    最近更新 更多