float类型做为参数传递过程中出现的问题
来源:互联网 发布:nba数据统计排名 编辑:程序博客网 时间:2024/05/17 02:07
编程中发现float类型数据在跨文件的值调用中会发生异常。举例如下:
test.c
- void a(float x1) {
- printf("%f", x1);
- }
- void b(float x1) {
- a(x1);
- }
- #include <stdio.h>
- int main(){
- b(3.3);
- }
运行输出结果是一个奇大无比的数字
若新建头文件test.h,在头文件中声明一下这两个函数
- void a(float x1);
- void b(float x1);
在运行发现输出恢复正常。得到3.30000
原因:
在你没有INCLUDE头文件的时候,编译器不知道你的函数原型,在生成目标文件时会进行参数推断,就是根据你调用的情况进行推断,仅推断参数个数,参数数据类型会一律推断为INT型,之后生成二进制可执行文件时,链接器在环境变量指定的目录或者当前目录下寻找到匹配的函数定义,进行链接,但是之前的MAIN目标文件已经按照INT型进行参数推断了,所以数据会按照INT型进行存储和传递,最后真正执行时调用printf对一个INT型存储的数据按照FLOAT型进行输出,结果是不可预估的。
自己试验了下,如果参数是3.0,double型输出就没问题,如果参数是3,double型输出就会有问题,输出了0.00000。所以没有头文件的时候,编译器除了根据参数推断参数的个数,还会推断参数的类型,不过浮点型数据会默认为double型,而不是float型。。。
测试了下,即使参数是3.0f,编译器也还是会判断为double。。。不认作float。。。
所以为了避免这种问题,最好加上头文件,或者使用double类型
0 0
- float类型做为参数传递过程中出现的问题
- float类型在值传递过程中出现的问题
- float类型在值传递过程中出现的问题
- 探究float类型参数的传递方式
- 探究float类型参数的传递方式
- java float 类型存储到 sqlserver 的numeric 类型中,出现计算溢出的问题
- java float 类型存储到 sqlserver 的numeric 类型中,出现计算溢出的问题
- Java中String类型的参数传递问题的解析
- Java中String类型的参数传递问题的解析
- Java中String类型的参数传递问题的解析
- Java中String类型的参数传递问题的解析
- Java中String类型的参数传递问题的解析
- Java中String类型的参数传递问题的解析
- url中传递中文参数出现乱码的问题
- 指针做为参数传递
- String类型的参数传递过程
- java中String类型参数传递问题
- 子类函数使用父类类型做为参数时,调用该参数的protected变量问题
- jQuery实战1:概述,环境准备及入门实例
- 前端用CryptoJS类库的AES加密,后端解密不出来
- mobile/移动端
- 停下来想一想:你为什么会离开游戏行业?
- vs2012如何运行vs2013和vs2015创建的项目
- float类型做为参数传递过程中出现的问题
- 11.4容器的打印
- [均摊 平衡树 || 线段树] HDU 5634 Rikka with Phi
- DRAMSim2学习1——简介
- c# XML读取创建修改节点,子节点,和值
- 配置nginx+php+mysql遇到的问题
- 【BZOJ 1528】[POI2005]sam-Toy Cars 贪心+堆
- uitextview.text赋值时,输入改变uitextview的值,监听改变状态
- js高级程序设计笔记5---BOM对象