我运行以下代码:
void func()
{
int i;
int array[10];
cout << &i << endl;
for(int i = 0; i < 10; ++i)
{
cout << &array[i] << '\n';
}
}
输出是:
0x28fe98
0x28fe70
0x28fe74
0x28fe78
0x28fe7c
0x28fe80
0x28fe84
0x28fe88
0x28fe8c
0x28fe90
0x28fe94
为什么i
的地址是0x28fe98
?
我认为i
的地址必须是&array[0] - 4
为什么i
的地址实际上是&array[9] + 4
?
答案 0 :(得分:5)
为什么i的地址是0x28fe98?
它位于数组结束后
我认为i的地址必须是&amp; array [0] - 4。
为什么会这样?
为什么i的地址实际上是&amp; array [9] + 4?
因为i
位于您的数组之后:)
通常,元素被推入堆栈并且它们的地址减少而堆限制增加但是没有代码应该依赖于它,除非你处于低级别(asm等等)。