C++ int指针指向浮点指针-重新解释\u强制转换

C++ int指针指向浮点指针-重新解释\u强制转换,c++,casting,reinterpret-cast,C++,Casting,Reinterpret Cast,代码如下: int a = 1; int* ptr = &a; float* p1 = (float*)ptr // or reinterpret_cast<float*>(ptr); cout << *p1 << endl; 当我试图打印浮点指针p1所指向的值时,我得到的答案是:1.4013e-45。 谁能解释一下为什么会这样 谁能解释一下为什么会这样 通过与所指向对象的类型不兼容的指针访问对象,因此程序的行为未定义 我希望得到1作为输出 要获得f

代码如下:

int a = 1;
int* ptr = &a;
float* p1 = (float*)ptr // or reinterpret_cast<float*>(ptr);
cout << *p1 << endl;
当我试图打印浮点指针p1所指向的值时,我得到的答案是:1.4013e-45。 谁能解释一下为什么会这样

谁能解释一下为什么会这样

通过与所指向对象的类型不兼容的指针访问对象,因此程序的行为未定义


我希望得到1作为输出

要获得float 1,您可以将int静态转换为float,或者简单地将转换隐式:

float f = a;
std::cout << f;
谁能解释一下为什么会这样

通过与所指向对象的类型不兼容的指针访问对象,因此程序的行为未定义


我希望得到1作为输出

要获得float 1,您可以将int静态转换为float,或者简单地将转换隐式:

float f = a;
std::cout << f;

你期望什么值?为什么?我希望得到1作为输出。迂腐的回答是这是未定义的行为。从纸面上看,任何事情都可能发生,你无法控制。0x00000001表示1.40129846432e-45F=a;如果要将值指定给浮点。浮点的位与int的位完全不同。你期望什么值?为什么?我希望得到1作为输出。迂腐的答案是这是未定义的行为。从纸面上看,任何事情都可能发生,你无法控制。0x00000001表示1.40129846432e-45F=a;如果要将值指定给浮点。浮点的位与int的位完全不同。