#include <iostream>
using namespace std;
int main() {
int a = 5;
int *ptr = &a;
cout << ptr;
return 0;
}
在 VS Code 上删除此代码的可执行文件并重新运行它时,我得到
ptr
变量的相同值,这意味着变量 a
的地址位置保持不变。然而,这怎么可能,因为编译再次发生,所以资源分配不应该再次发生,因此变量 a
的地址(以及 ptr
的值)这次会有所不同吗?
即使您重新编译了代码,编译器生成的新二进制文件也应该与原始二进制文件相同。因此,您将运行相同的二进制文件两次。
a
存在于堆栈中,并且由于您运行相同的二进制文件两次,因此 a
很可能被分配在堆栈上的相同地址处。因此,a
可能具有相同的地址,因此 ptr
将具有相同的值。