C语言代码输出疑问:为何用%d输出float变量得到垃圾值而非1?
为什么这段C代码输出垃圾值而非1?
这段代码的行为属于C语言中的未定义行为,输出垃圾值是符合预期的,不会得到你预想的1,原因如下:
printf的格式化说明符与参数类型不匹配
%d是用来输出int类型数据的格式符,但你传入的是float类型变量i。在C语言的可变参数函数(比如printf)中,float类型参数会被隐式提升为double类型。printf不会自动将double转换为int,它会严格按照%d的规则去解析内存中的数据——而double的二进制存储格式和int完全不同,所以解析出来的就是无意义的垃圾值。你的逻辑误区
只有在赋值操作或者显式类型转换的场景下,float才会被转换为int并截断小数部分。比如:- 显式转换后传入printf:
printf("%d", (int)i); - 先赋值给int变量再输出:
int j = i; printf("%d", j);
这两种情况才会输出1,但你的代码里没有触发这种转换逻辑。
- 显式转换后传入printf:
修正后的代码示例:
#include <stdio.h> int main() { float i; i=1; printf("%d", (int)i); // 显式转换为int类型 return 0; }
内容的提问来源于stack exchange,提问作者Abhinil Nath
相关产品推荐
相关产品推荐

