为什么这段代码一直打印到b [index]:0直到1011,而不是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

最佳答案

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

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

关于c - C中的Array的值在数组大小索引之后初始化为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52417211/

10-11 07:38