当我运行此代码时:
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
至少在我的估计中,我应该为所有这三个陈述得到相同的数字。这是怎么回事?
答案 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);