|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
C语言并不检查数组下标是否越界,虽然提高了程序运行效率,但有时难免出现些异常。代码如下
#include <stdio.h>
int main()
{
int i;
int a[3]={1,2,3};
for(i=1;i<=3;i++)
{
a[i]=0;
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
======================================================
运行结果竟然陷入死循环。具体的原因我有一点地方没有理解。
书上的解释是:
假设计算机为变量i分配的内存位置为0x0013ff7c,数组a中各元素所分配的内存位置如下:
a[0]地址:0x0013ff70
a[1]地址:0x0013ff74
a[2]地址:0x0013ff78
当i=1 时,a[1]的值为0; i 自增运算后的值为2,a[2]的值为0;i再次自增运算后的值为3,此时
程序将找到数组元素a[3]所在的内存位置(0x0013ff7c),并写入0,从而导致变量i的值为0,
然后就无限循环下去了。。。
===============================================
===============================================
问题:我就是不明白为什么数组a[3]的内存位置是变量i的内存位置0x0013ff7c?
===============================================
===============================================
求大神们帮我解释下下吧。
|
|