本来想用整型指针去取浮点型变量地址,然后再用 *整型指针去使用浮点值。
发现好像并不能这样做,而且遇到一个奇怪的现象,
用整型指针去取浮点型变量的地址。
不加打印无法取到值,
加了如下 1111 行,先把变量打印一遍,竟然能取到正确的值了。
这算是错错得对?还是有其他问题。
#include <stdio.h>
int main()
{
int *pu32Float = NULL;
float floatData = 4.55;
printf("IntData:%f\n",floatData ); /* 1111 */
pu32Float = (int *)&floatData ;
printf("OutData:%f\n",*pu32Float );
return 0;
}
c-free上试了下也是一样的现象
结果不应该是4.550000
int类型和float类型在内存中的存储规则是不一样的,虽然两者都指向一块内存,但是在printf中 *pu32Float这里先按照int类型的规则取出数据,然后把这个数据提升为float类型,出来的结果不一定是4.550000。
用下面的代码才会是4.550000:
#include <stdio.h>
int main()
{
int* pu32Float = NULL;
float floatData = 4.55;
printf("IntData:%f\n", floatData); /* 1111 */
pu32Float = (int*) & floatData;
printf("OutData:%f\n", *((float*)pu32Float));
return 0;
}
doubleData变量哪来的啊?
你输出界面截图看看
你这代码理论上根本编译不过去
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!