<分区>
我在 VSC 中做了一些测试来检查数组的行为。我在一个测试的输出中遇到了这个问题,尽管数组元素定义正确,但显然发生了未定义的行为,但只是没有初始化(正确的我的意思是数组元素是用数组本身定义的,而不是额外地超过导致众所周知的未定义行为的数组边界)。
这是我的代码,下面是它的输出:
问题是关于 foo[4]
的输出,它是 8 而不是 0。
#include <stdio.h>
int main()
{
int foo[12];
int i;
foo[5] = 6;
foo[6] = 7;
foo[7] = 8;
foo[8] = 9;
foo[9] = 10;
foo[10] = 11;
foo[11] = 12;
for(i=0 ; i<=11 ; i++)
{
printf("foo[%d] = %d\n",i,foo[i]);
}
}
输出:
foo[0] = 0
foo[1] = 0
foo[2] = 0
foo[3] = 0
foo[4] = 8
foo[5] = 6
foo[6] = 7
foo[7] = 8
foo[8] = 9
foo[9] = 10
foo[10] = 11
foo[11] = 12
此后我尝试了其他方法并想看看 foo[5]
是否也受到影响,如果我不初始化它,但事实并非如此。 foo[4]
仍然有错误的值 btw:
#include <stdio.h>
int main()
{
int foo[12];
int i;
// foo[5] = 6;
foo[6] = 7;
foo[7] = 8;
foo[8] = 9;
foo[9] = 10;
foo[10] = 11;
foo[11] = 12;
for(i=0 ; i<=11 ; i++)
{
printf("foo[%d] = %d\n",i,foo[i]);
}
}
输出:
foo[0] = 0
foo[1] = 0
foo[2] = 0
foo[3] = 0
foo[4] = 8
foo[5] = 0
foo[6] = 7
foo[7] = 8
foo[8] = 9
foo[9] = 10
foo[10] = 11
foo[11] = 12
我的问题是:为什么在 foo[4]
处会出现未定义的行为?数组定义正确,有 12 个元素。