You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段C语言代码输出为0.000000而非预期的10.000000?

为什么这段C代码输出0.000000而非预期的10.000000?

先看你的代码:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i=10;
    void *ptr=&i;
    printf("%f",*(float *)ptr);
    return 0;
}

问题出在这几个关键点:

  • int和float的二进制存储规则完全不一样
    32位int类型的10,在内存里的二进制是00000000 00000000 00000000 00001010。但float采用IEEE 754单精度格式存储,由1位符号位、8位指数位、23位尾数位组成。你直接把int的二进制按float的规则解析,得到的是一个极小的非规格化数,打印时会被显示为0.000000。

  • 你搞错了类型转换的方式
    当前代码是强制把int的地址转成float指针再解引用,这是直接读取内存二进制并按另一种类型解释,不属于数值转换。如果要得到10.0的float值,应该把int的数值转换成float类型,比如:

    printf("%f", (float)i);
    
  • 这种写法属于C标准里的未定义行为
    C标准规定,用指向不兼容类型的指针访问对象(char指针除外)是未定义行为,编译器可能输出任何结果,这次输出0.0只是其中一种可能,换个平台或编译器结果可能完全不同。

内容的提问来源于stack exchange,提问作者Patel Sujal Vipul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:26:12