地上一个猴 2022-03-22 16:34 采纳率: 66.7%
浏览 105
已结题

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

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

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

  • 关注

    结果不应该是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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 修改了问题 3月22日
  • 修改了问题 3月22日
  • 展开全部

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记