C中的Array的值在数组大小索引之后初始化为0

时间:2018-09-20 03:37:17

标签: c arrays

为什么这段代码直到1011之前一直打印出b [index]:0,直到1012才开始产生垃圾?

int b[10];
for(int i=0; i<1025; i++){
    printf("b[%d]: %d\n", i, b[i]);
}

我得到的输出是:

b[0]: 0
b[1]: 0
...
b[1011]: 0
b[1012]: 1376789009
b[1013]: 0
b[1014]: 2036613137

1 个答案:

答案 0 :(得分:2)

您的数组只能容纳10个元素,但是您尝试访问超出该范围的元素。 C没有任何类型的边界检查来确保您不会这样做。相反,您得到的是undefined behavior,这意味着您无法预测程序的行为。还要注意,值0与可能打印的任何其他值一样多。

此外,由于b未初始化,因此它包含的10个元素的值不确定。它们可以为0,也可以完全为其他值。如果这些值恰好具有陷阱表示,那么在这种情况下,您也可能触发未定义的行为,尽管您不太可能在现代系统上遇到这种情况。