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

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

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

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