关于函数声明和调用时参数类型不一致的情况

来源:互联网 发布:js 删除数组元素 编辑:程序博客网 时间:2024/05/23 16:40

还是上一篇所讲的因为老式风格的C函数声明可以不指定参数个数和类型,这样编译器不会对函数调用做检查。

请看下面这个例子:

#include <stdio.h>int main(void){void foo();//void foo(double);char c = 60;foo(c);return 0;}void foo(double d){printf("%f\n", d);}
会发现程序运行结果为0.000000

调试运行会发现:

1.由于foo函数声明为void foo(void)所以实参c根本没有传递进去;

2.局部变量d为随机值,我的机器上是2.5463949521227207e-313,此数已超过double所表示的范围所以打印出来0.000000


如果将声明语句换成注释掉的那句,会发现程序运行结果为60.000000

声明和实现一致,参数能传递,虽然调用时传进的是一个char值,但运行时会强制类型转换为double类型的。




原创粉丝点击