为什么 {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 情况,因为该值与默认值相同。