int i,a[10]; //a[10]定义了一个从a[0]到a[9]的数组
printf("顺序为:");
for(i=0;i<10;i++)
{
a[i]=i;
printf("%d ",a[i]);
}
printf("\n");
printf("逆序为:");
for(i=10;i>=0;i--)
{
printf("%d ",a[i]);
}
上面代码可见第二个循环体内下标出现了a[10],但是我们定义的a[10]是从a[0]a到a[9],显然a[10]已经越界,但是我使用的C与C++程序设计仍可成功运行。运行结果下图:
然后我继续尝试(代码最后两行):
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int i,a[10]; //a[10]定义了一个从a[0]到a[9]的数组
printf("顺序为:");
for(i=0;i<10;i++)
{
a[i]=i;
printf("%d ",a[i]);
}
printf("\n");
printf("逆序为:");
for(i=10;i>=0;i--)
{
printf("%d ",a[i]);
}
printf("\n");
printf("%d ",a[11]); //a[11]下标越界 编译器不自动检测。
}
依然可以运行(结果不对):
数组a[11]显然越界,但是依旧可以运行,通过查询发现,不检测下标可以提升运行效率 越界之后 会造成BUG,也就是数值异常 只能编写者自己注意!!!而且a[10] 的意义在于其是声明了一段合法的内存空间可供使用,下标越界超出的部分虽然可以读写 但是属于非法读写。