在一个int数组中,超出数组长度后的第一个值竟然和数组唱的相等!这是为什么??

附上代码
#include
int main()
{
int a[5];
int i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
输入为
1 2 3 4 5
输出为
1 2 3 4 5 5 2686760 1973329460 2686868 4198653

求大神解答啊!

后面是随机的数据,不可信,数组越界后的数据都是内存地址的随机数据。

 是的,因为你数组越界了,而你数组后定义了int i,所以你访问的是i这个变量。
正好在你循环的时候,当i=5输出了它。

你可以修改下代码
int a[5];
int j = 123; //加上这个
int i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
保管你输出123然后6,然后随机结果

这是个未定义的行为,你恰巧输出了5是因为,分配空间的时候i正好紧邻着数组,所以能输出5
但谁也没有规定过一定要这样分配空间,我在VS下就不是这个结果。

图片说明

尽量不要写这种越界访问的代码。
不同的编译器和环境对于变量内存的分配是可以不同的。
不要写连自己也预测不了结果的代码!

数组越界了,那么分配给你的内存地址就是随机的,不同的编译器的输出结果也不同,你可以试试其他的编译器。