Ngo*_*han 10 c arrays initialization
我有一个包含3个元素的数组.但我只想初始化其中的两个.我让第三个元素空白.
unsigned char array[3] = {1,2,};
int main(){
printf("%d",array[2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印结果是0.我在IAR上测试了它,还有一些在线编译器.
第三个元素的值是否有任何C规则?是否有任何编译器通过0xFF填充第三个元素?(特别是交叉编译器)
kay*_*lum 11
是的,C标准确实定义了这种情况下会发生什么.所以不,0xFF在这种情况下,应该没有符合C标准的编译器.
该标准的第6.7.9节说:
初始化
...
10 ...如果未明确初始化具有静态或线程存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零;
- 如果它是一个聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零比特;
- 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员,并将任何填充初始化为零位;
...
21如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应与具有静态存储持续时间的对象隐式初始化.