我尝试了以下代码:
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循环)
答案 0 :(得分:5)
int a[4] = {0};
实际上是一种误导。这并不意味着“将所有元素初始化为0
”,而是“将第一个元素初始化为0
并将其余元素初始化为其默认值”,然后将其余元素初始化为{{1} },结果全为零。
同样,0
将第一个元素初始化为int b[4] = {5};
,其余元素初始化为5
,因此您得到0
。
所有未显式初始化的数组元素均被初始化 隐式地与具有静态存储持续时间的对象相同。
对于5 0 0 0
,此隐式初始化将它们设置为char
。
答案 1 :(得分:3)
当数组初始值设定项的元素少于数组初始值时,将按顺序应用给定的初始值设定项,并将其余所有数组初始值初始化为0。因此,在您的情况下,select FORMAT([sampleField], '0.' + REPLICATE('#', 308))
设置为5,其余的设置为0。
“似乎”适用于0情况,因为该值与默认值相同。