如果我在没有初始化所有值的情况下定义数组,如下所示:
int x[10] = {1, 3, 5, 2, 9, 8, 4, 7, 6};
例如,如果我引用x[9]
会怎样?它取得了什么价值?它是0
,因为我没有定义该值吗?
答案 0 :(得分:2)
例如,如果我引用x [9]?
会发生什么
它将为零(正如您所发现的那样)。初始化数组的一个或多个元素时,数组的其余元素将隐式初始化为零。
这不是因为您没有“定义”任何值,而是C标准规定的行为。
C11草案,§6.7.9,初始化
如果括号括起的列表中的初始值设定项少于此值 是聚合的元素或成员,或者是一个或多个字符 string literal用于初始化已知大小的数组 是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储的对象相同 持续时间。
这意味着x [9]将初始化为0
,因为您已明确初始化索引范围0-8。
同样,如果你有:
int i;
int j;
int *ptrs[10] = {&i, &j}; // an array of 10 pointers
其余的指针,索引范围从2-9将被隐式初始化为空指针。
答案 1 :(得分:1)
初始化列表将按索引的递增顺序初始化数组元素。如果初始化程序列表的大小小于数组大小的大小,那么其余元素将使用0
进行初始化,