ref和指针之间的不同行为

时间:2014-01-17 04:01:53

标签: c++ casting

这只是我遇到的一个奇怪的事情,并不能完全理解发生了什么。

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,你是垃圾。

发生了什么事?

3 个答案:

答案 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;
}