不同块作用域中的 C++ 变量具有相同的地址
c++ variables in different block scopes has same addresses
在下面的代码 #3 和 #4 打印相同的地址 'int i'
谁能描述一下它是如何工作的?
它发生在一些 g++ 中,而不是在 vc++ 中,clang
#include <iostream>
int i = 0;
int main()
{
std::cout << "#1: " << &i << std::endl;
{
int i;
std::cout << "#2: " << &i << std::endl;
{
int i;
std::cout << "#3: " << &i << std::endl;
}
{
int i;
std::cout << "#4: " << &i << std::endl;
{
int i;
std::cout << "#5: " << &i << std::endl;
}
}
}
}
如果我运行上面的代码,结果如下所示
#1: 0x601194
#2: 0x7ffc027b5154
#3: 0x7ffc027b515c
#4: 0x7ffc027b5158
#5: 0x7ffc027b515c
谁能描述一下这是如何工作的?
变量被销毁后(对于自动存储变量,当它们的块结束时发生(,它的内存可以再次重用。因此,您在那里看到的内容 - 案例 #3 上的i
被销毁,因为它的块终止并且稍后再次重用内存(在这种情况下,碰巧 #5 中的i
重复使用相同的内存(。
相关文章:
- 将数组的地址分配给变量并删除
- 将地址分配给本地指针后,公共对象的变量将消失
- 通过按地址访问变量
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 为什么同一个变量的内存地址不同?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 不同块作用域中的 C++ 变量具有相同的地址
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- C++在变量的内存地址上做什么来"deallocate"它?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 如何找到在本地范围内声明的变量的地址?
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 变量地址的运算符[]是如何工作的
- 使用基地址和偏移量获取变量的地址
- 两个不同的进程,在同一地址上有 2 个 std::atomic 变量?
- libmysql:警告:返回局部变量"行"的地址(C++/C)