【问题标题】:Why {0} assignation works but not {5} for an array [duplicate]为什么 {0} 分配有效但 {5} 不适用于数组 [重复]
【发布时间】:2019-02-18 15:14:26
【问题描述】:

我尝试了以下代码:

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 循环)

【问题讨论】:

  • 您不会获得c 的随机值。您可以在c 地址获得内存中的实际内容
  • @JohnH 这实际上不是速记,请查看答案并复制。
  • 这里有另一个副本:stackoverflow.com/questions/15520880/…

标签: c arrays array-initialization


【解决方案1】:

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

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

The documentation 这么说:

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

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

【讨论】:

    【解决方案2】:

    当数组初始值设定项的元素少于数组时,将按顺序应用给定的初始值设定项,并将所有剩余的数组元素初始化为 0。因此,在您的情况下,b[0] 设置为 5,其余设置为 0。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2018-04-03
      相关资源
      最近更新 更多