为什么 {0} 赋值有效但 {5} 不适用于数组
Why {0} assignation works but not {5} for an array
我尝试了以下代码:
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};
实际上是误导。不是"initialize all elements to 0
"的意思,是"initialize the first element to 0
and the rest to its default value"的意思,剩下的再初始化为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
。
当数组初始值设定项的元素少于数组时,将按顺序应用给定的初始值设定项,并将所有剩余的数组元素初始化为 0。因此,在您的情况下,b[0]
设置为 5,其余的获得设置为 0。
它 "seems" 适用于 0 情况,因为该值与默认值相同。
我尝试了以下代码:
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};
实际上是误导。不是"initialize all elements to 0
"的意思,是"initialize the first element to 0
and the rest to its default value"的意思,剩下的再初始化为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
。
当数组初始值设定项的元素少于数组时,将按顺序应用给定的初始值设定项,并将所有剩余的数组元素初始化为 0。因此,在您的情况下,b[0]
设置为 5,其余的获得设置为 0。
它 "seems" 适用于 0 情况,因为该值与默认值相同。