以下是引用ltfkdc在2010-7-30 11:49:21的发言:
i的数据空间在a[]之后
C的数组寻址算法就是:
a+N N是下标a是数组的起始地址
所以a[10]=a+10*4=i
……………………………………………………………………………………………………
能不能把数组的寻址算法说清楚点,比如说,告诉我,我把i定义在a[10]前面时,a[10]怎么得到的10。。谢谢
数组的寻址算法啊,书上应该又说过。网上也有很多,我就不重复造轮子了。
下面说说当i在a[10]前面时为啥得到10:
程序代码:
#include <stdio.h>
int main()
{
int i,a[10]={5,12,8,20,15};
for(i=0;i<10;i++)
printf("%d\t",a[i]);
printf("%d\n",a[10]);
return 0;
}
当执行到return 0;的时候我查看了一下内存,发现:
搜索&i:
0x22ff3c: 0a 00 00 00 00 1a 40 00
0x22ff44: f0 f5 86 02 00 b0 fd 7f
搜索&a:
0x22ff14: 05 00 00 00 0c 00 00 00
0x22ff1c: 08 00 00 00 14 00 00 00
0x22ff24: 0f 00 00 00 00 00 00 00
0x22ff2c: 00 00 00 00 00 00 00 00
0x22ff34: 00 00 00 00 00 00 00 00
0x22ff3c: 0a 00 00 00 00 1a 40 00
0x22ff44: f0 f5 86 02 00 b0 fd 7f
0x22ff4c: f0 f5 86 02 00 b0 fd 7f
猜测:C语言是按照字母顺序来排空间的。。。
==========================================
BTW:之所以不用汇编码说问题是因为,我那CB的DisAsm好像有点问题。