打印变量的地址

Printing addresses of variables

本文关键字:地址 变量 打印      更新时间:2023-10-16

当我运行这段代码时:

uint8_t stackVar = 0;
void* ptr = &stackVar;
uint8_t& ref = reinterpret_cast<uint8_t&>(ptr);
std::cout << (void*)&ref << std::endl;
std::cout << ptr << std::endl;
std::cout << (void*)&stackVar << std::endl;

我得到这个输出:

0x22fe30
0x22fe3f
0x22fe3f
至少在我看来,

我应该得到所有这三个陈述的相同数字。 这是怎么回事?

uint8_t& ref = reinterpret_cast<uint8_t&>(ptr);

您正在投射指向引用的指针 (void*(。这不会产生相同的uint8_t,因为它将引用一个临时uint8_t,这是你从空指针创建的。而且由于创建了一个新uint8_t,因此您将获得不同的地址。

也许你的意思是uint8_t& ref = reinterpret_cast<uint8_t&>(stackVar);