调用函数时无法正确打印float变量,如何解决?
解决C语言中float变量传入函数后打印错误的问题
问题的核心原因是缺少函数原型声明,导致编译器对函数调用进行了错误的隐式类型处理:
在C语言中,如果调用函数前未声明其原型,编译器会默认进行隐式声明——假定函数返回int类型,同时会对传入的参数进行默认类型提升:比如float类型会被自动提升为double类型。但你的call函数定义中参数是float类型,这就造成了参数传递时的类型不匹配,栈中存储的double值被错误解析为float,最终打印出错误的0.000000。
而int类型的代码能正常运行,是因为int类型在隐式声明时不会发生类型提升,参数传递的类型和函数定义匹配,所以输出正确。
正确的解决方法有两种:
方法1:在调用前添加函数原型声明
#include <stdio.h> // 声明call函数的原型,明确参数类型 void call(float bar); int main() { float foo = 6; call(foo); } void call(float bar) { printf("%f", bar); }
方法2:将函数定义放在调用函数(main)之前
让编译器在编译main函数前就能看到call函数的完整定义,无需隐式声明:
#include <stdio.h> void call(float bar) { printf("%f", bar); } int main() { float foo = 6; call(foo); }
运行以上任意一种修改后的代码,都能正确输出6.000000。
内容的提问来源于stack exchange,提问作者Buddy Pall
相关产品推荐
相关产品推荐

