c - 为什么 {0} 分配有效但 {5} 不适用于数组

标签 c arrays array-initialization

我尝试了以下代码:

int a[4] = {0};
int b[4] = {5};
int c[4];
printf("%d %d %d %d %d %d\n", a[0], a[3] , b[0], b[3], c[0], c[3]);

得到以下结果:

0 0 5 0 random random

虽然我知道为什么我得到 c 数组的随机值,但我不明白为什么分配 {5} 不能作为 {0 } 并且只初始化数组的第一个元素。

有没有办法将数组 b 元素初始化为不同于 0 的相同值? (不使用 memset 或 for 循环)

最佳答案

int a[4] = {0}; 实际上具有误导性。不是“将所有元素初始化为0”,而是“将第一个元素初始化为0,其余为默认值”,剩下的就是初始化为 0,结果为全零。

同样,int b[4] = {5}; 将第一个元素初始化为 5,其余元素初始化为 0,所以你得到5 0 0 0.

The documentation是这样说的:

All array elements that are not initialized explicitly are initialized implicitly the same way as objects that have static storage duration.

对于char,这个隐式初始化将它们设置为0

关于c - 为什么 {0} 分配有效但 {5} 不适用于数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750267/

相关文章:

java - 插入 AssignmentOperator ArrayInitializer 错误

C 中类型之间的转换

c - 二维数组打印错误

java - 在 Java 中对插入数组的字符串进行排序

javascript - 如何在 Angular js中相互绑定(bind)两个不同数组的值

c++ - new(size, value) Type[0] 返回的指针是否合法,是否可以用于构建数组?

c - 两种数组指针初始化方法的区别

c - 以下 C 代码有什么问题 - 结构和指针

c - 为什么我们使用 scanf() 却需要 getchar()?

javascript - 正在渲染对象数组的数组,不断获取 "Warning: Each child in a list should have a unique "键“prop”。