这只是我遇到的一个奇怪的事情,并不能完全理解发生了什么。
int main()
{
int i{ 5 };
void* v = &i;
int* t = reinterpret_cast<int*>(v);
int u = reinterpret_cast<int&>(v);
int i2 = *t;
}
t正确5,你是垃圾。
发生了什么事?
答案 0 :(得分:3)
v
存储i
的地址,就像你说的那样,垃圾。 (它不是真正的垃圾,但价值本身毫无意义,除非它是该程序特定运行中i
的地址)。 u
存储与v
相同的值(按位),但重新解释为整数,因此它是“垃圾”。
t
不是5。或者如果是的话,这是一个极不可能的巧合。 t
是[{1}}的地址,i
是5,因此i
(即,*t
已取消引用)为5。
答案 1 :(得分:0)
printf("%x %x\n", u, v);
对我而言:
39fdb8 39fdb8
不是垃圾,而是v
的价值。
答案 2 :(得分:0)
你是int v是指针* v是int,但我们应该 以下代码可以输出5 5
#include <iostream>
using namespace std;
int main()
{
int i{ 5 };
void* v = &i;
int* t = reinterpret_cast<int*>(v);
int u = reinterpret_cast<int&>(*(int*)v);
int i2 = *t;
std::cout << *t << std::endl;
std::cout << u << std::endl;
return 0;
}