打印变量的地址

时间:2016-05-14 17:24:18

标签: c++ pointers reference memory-address

当我运行此代码时:

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

至少在我的估计中,我应该为所有这三个陈述得到相同的数字。这是怎么回事?

1 个答案:

答案 0 :(得分:2)

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

您正在向引用强制转换指针(void*)。这将导致相同的uint8_t,因为它将引用您从void指针创建的临时uint8_t。而且由于创建了新的uint8_t,您将获得不同的地址。

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