为什么{0}分配有效但数组不为{5}

Sto*_*ogy 2 c arrays array-initialization

我尝试了以下代码:

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]);
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

0 0 5 0 random random
Run Code Online (Sandbox Code Playgroud)

虽然我得到了为什么我得到了c数组的随机值,我不明白为什么分配{5}不起作用{0},只是初始化数组的第一个元素.

有没有办法将数组b元素初始化为不同于0的相同值?(不使用memset或for循环)

Bla*_*aze 5

int a[4] = {0};实际上是误导.它并不意味着"将所有元素初始化为0",它意味着"将第一个元素初始化为0,将其余元素初始化为其默认值",然后将其余元素初始化为0,从而产生全零.

同样int b[4] = {5};初始化第一个元素5,其余的0,所以你得到5 0 0 0.

文档说明了这一点:

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

因为char,这个隐式初始化将它们设置为0.