1

代码 1:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
}

输出 1:

&a: 0x22ff48

代码 2:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
   cout << "&b: "<<&b << endl;
}

输出 2:

&a: 0x22ff4c
&b: 0x22ff48


所以我的问题是为什么a当我打印出变量的地址时变量的地址发生了变化b

4

2 回答 2

7

当你根本不使用b时,编译器可能将它完全删除,因此它不占用任何空间。

当您获取 的地址时b,这会强制编译器为其分配空间。

于 2012-12-07T21:17:35.633 回答
5

无论如何,操作系统下次可以自由地在另一个(虚拟)基地址加载可执行映像。

无论如何,您所观察到的都是未定义的。关键是,即使没有变量被优化掉,并且程序没有被重新编译,它每次都可能产生不同的结果。

如果您将操作系统视为实现的一部分,它可能是实现定义的

于 2012-12-07T21:19:26.270 回答