在X86架构下有以下代码,运行结果是什么?
int i;
int a[10];
for (i = 0; i <= 10; i++)
{
a[i] = 0;
}
答案:死循环
why??
先说说X86这个架构,这厮开辟一个栈让你用,但确是从高地址向低地址增长。
也就是说你先声明变量i,i放在高地址。然后开辟一个数组,放在低地址。而最低的地址就是数组的首地址。
根据程序,i 的值会被最后一个赋值给变成0,这不就死循环了么?!
地址 | 数据 | |
0x1028 | i | |
0x1024 | a[9] | |
0x1020 | a[8] | |
0x101c | a[7] | |
0x1018 | a[6] | |
0x1014 | a[5] | |
0x1010 | a[4] | |
0x100c | a[3] | |
0x1008 | a[2] | |
0x1004 | a[1] | |
0x1000 | a[0] | ←数组a首地址 |