关于C语言输出格式符中的传值问题
2016-04-22 18:40
253 查看
今天在看三剑客之《C陷阱与缺陷》时偶然发现的一个陷阱,传递同一个参数、调用同一个函数,输出的结果却不一样,以下是源代码:
仔细看square函数,它的函数签名是double square(double),返回值类型为double型,而在输出时没有进行转换,则直接变成了 0 。
如果不信,可以直接看第三个输出,输出结果为 25 。
这是博主偶然发现的一个陷阱,望大家在以后的输出时,应当注意类型是否匹配,是否需要转换。
#include<stdio.h> double square(double); main(){ int c = square(5); printf("%d\n",c); printf("%d\n",(int)square(5)); printf("%.0f\n",square(5)); } double square(double x){ return x*x; }对于第一个输出,相信大家都毫无疑问的回答是25,但是第二个输出,如果将(int)强制转换去掉,则输出结果就变成了 0 ,对你没有看错就是 0 。
仔细看square函数,它的函数签名是double square(double),返回值类型为double型,而在输出时没有进行转换,则直接变成了 0 。
如果不信,可以直接看第三个输出,输出结果为 25 。
这是博主偶然发现的一个陷阱,望大家在以后的输出时,应当注意类型是否匹配,是否需要转换。
相关文章推荐
- 我的C++第四次作业
- 可变参数的宏定义
- c++ 构造函数、拷贝构造函数——c++复习(二)
- C/C++复习:计算该日是该年的第几天(结构体)
- C++中接口与实现的分离技术
- C语言中+的优先级大于>>
- C/C++复习:不等长字符串的排序(1)
- C++作业4
- C/C++复习:字符串的比较
- 根据基准时间的毫秒数获取现在的时间
- C++的精髓——虚函数
- OC最实用的runtime总结
- C++虚表
- C++之优先使用抽象类
- C++作业四—分数的累加,星形图案,百钱白鸡问题
- C++中所有的变量和函数都必须有类型
- 对C语言register的增强
- c++上机作业4项目三乘法口诀表.项目六星号图.项目七穷举法
- c++学习_构造函数的三种情况下的应用
- 【c++】深度探索虚继承内存布局