(float*)
在g的情况下特别做了什么。如果我写g = *&i;
那么ouptut是正常的,即g = f,但是如果g = *(float*)&i;
那么为什么g = 0.0000 ???
#include <stdio.h>
int main()
{
int i = 37;
int *p;
p = &i;
float f = i;
printf("%d\n", i);
printf("%d\n", p);
printf("%d\n", *p);
float g = *(float*) &i;
printf("i = %d f = %f g = %f", i, f, g);
}
答案 0 :(得分:0)
在行中:
g = *&i;
运算符*
和&
互相取消,结果就好像代码是:
g = i;
该行:
float g = *(float*) &i;
导致未定义的行为,因为int和float类型不兼容。
您看到的结果是由未定义的行为引起的,尽管在您的情况下行为是相对良性的。会发生的是,int类型的变量位被重新解释,就好像它是float类型一样。
通过指针进行转换不是解释其他类型位的正确方法。
答案 1 :(得分:0)
g = *&i
与g = i
相同,并将int赋值给float。编译器通过=
运算符执行转换:
另一种结构是重新解释指向浮点指针的整数指针。由于浮点数的数据格式不同(浮点数通常使用一些位用于尾数,一些位用于指数),对于整数(整数只是序列化为内存8位乘8位),编译器只是将数据从源复制到目的地没有任何额外的转换,你没有得到你想要的。