我有以下代码
int t[] = {
[1] = 45,
[2] = 33
};
Run Code Online (Sandbox Code Playgroud)
t[0]在这种情况下,价值是多少?它会包含垃圾吗?
eff*_*ffe 12
其他值将被初始化; 从C11标准,§6.7.9 初始化,19和21:
初始化应在初始化器列表顺序中进行,每个初始化器为特定子对象提供,覆盖同一子对象的任何先前列出的初始化器; 151)未明确初始化的所有子对象应与具有静态存储持续时间的对象隐式初始化.
151)子对象的任何初始化程序被覆盖并因此不用于初始化该子对象可能根本不会被评估.
如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.
并且未初始化int的静态存储持续时间被初始化为零; 同一节,10:
如果未显式初始化具有自动存储持续时间的对象,则其值不确定.如果未显式初始化具有静态或线程存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零 ;
- 如果它是一个聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零比特;
- 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员,并将任何填充初始化为零位;
C89和C99中的行为相同.