我尝试了以下代码:
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/