6

我有以下代码

int t[] = {
        [1] = 45,
        [2] = 33
    };

t[0]在这种情况下,价值是多少?它会包含垃圾吗?

4

1 回答 1

12

其他值将被初始化;来自 C11 标准,§6.7.9初始化,¶19 和 ¶21:

初始化应按初始化程序列表顺序进行,为特定子对象提供的每个初始化程序都覆盖同一子对象的任何先前列出的初始化程序;151)所有未显式初始化的子对象都应隐式初始化,与具有静态存储持续时间的对象相同。

151) 任何被覆盖的子对象的初始化器,因此不用于初始化该子对象可能根本不会被评估。


如果大括号括起来的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小数组的字符串文字中的字符少于数组中的元素,则聚合的其余部分应隐式初始化与具有静态存储持续时间的对象相同。

并且未初始化int静态存储持续时间被隐式初始化为零;同一部分,¶10:

如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。如果具有静态或线程存储持续时间的对象未显式初始化,则:

  • 如果是指针类型,则初始化为空指针;
  • 如果是指针类型,则初始化为空指针;
  • 如果它具有算术类型,则将其初始化为(正或无符号)零
  • 如果是聚合,则根据这些规则(递归)初始化每个成员,并将任何填充初始化为零位;
  • 如果是联合,则根据这些规则(递归)初始化第一个命名成员,并将任何填充初始化为零位;

C89 和 C99 中的行为相同。

于 2012-12-10T17:28:13.113 回答