为什么下面这个有关数组的c程序得到的最后的结果是10而不是9

来源:百度知道 编辑:UC知道 时间:2024/05/29 19:00:38
#include "stdio.h"
void main()
{
int i,a[10];
for(i=0;i<=9;i++)a[i]=i;
printf("%d ",a[i]);
}
这个程序最后输出的 应该是a[10],但是a[10]没有赋值呀??
如果我把程序写成
#include "stdio.h"
void main()
{
int i,a[10];
for(i=0;i<=9;i++)a[i]=i;

printf("%d %d %d %d %d %d %d %d %d %d",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
}
那么得到的结果就是
0 1 2 3 4 5 6 7 8 9

根本就没有a[10]这个元素
定义的a[10],元素只有a[0]-a[9]
那么a[10]就是越界,但是C编译器检查不严格,但是运行程序就会出问题
a[10]是引用a[9]的下一个地址,也就是个随机值,因为根本就没有初始化
使用不同的编译器也会得到不同的结果,我用TC,VC,GCC得到了3中不同的结果
所以说,这种写法就是根本错误的