浮点型数据取整型指针 奇怪现象

本来想用整型指针去取浮点型变量地址,然后再用 *整型指针去使用浮点值。

发现好像并不能这样做,而且遇到一个奇怪的现象,
用整型指针去取浮点型变量的地址。
不加打印无法取到值,
加了如下 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;
}

img

c-free上试了下也是一样的现象

img

img

结果不应该是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变量哪来的啊?
你输出界面截图看看

你这代码理论上根本编译不过去

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632