为什么{0}分配有效,而数组的{5}无效

时间:2019-02-18 15:14:27

标签: c

我尝试了以下代码:

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不同的相同值? (不使用内存集或for循环)

2 个答案:

答案 0 :(得分:5)

int a[4] = {0};实际上是一种误导。这并不意味着“将所有元素初始化为0”,而是“将第一个元素初始化为0并将其余元素初始化为其默认值”,然后将其余元素初始化为{{1} },结果全为零。

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

The documentation这样说:

  

所有未显式初始化的数组元素均被初始化   隐式地与具有静态存储持续时间的对象相同。

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

答案 1 :(得分:3)

当数组初始值设定项的元素少于数组初始值时,将按顺序应用给定的初始值设定项,并将其余所有数组初始值初始化为0。因此,在您的情况下,select FORMAT([sampleField], '0.' + REPLICATE('#', 308)) 设置为5,其余的设置为0。

“似乎”适用于0情况,因为该值与默认值相同。