这是我的代码片段:
float square_root(x)
float x;
{
.......
}
int main(){
printf("Square_root 2 = %f\n", square_root(4));
}
当我将数字 4.0 传递给square_root()
函数时,x
函数内的参数是 4.0000000 所以没关系。但是当我只传递 4(如示例中)时,x
函数内的变量变为 1.976262583365e-323#DEN
为什么会这样?
这是我的代码片段:
float square_root(x)
float x;
{
.......
}
int main(){
printf("Square_root 2 = %f\n", square_root(4));
}
当我将数字 4.0 传递给square_root()
函数时,x
函数内的参数是 4.0000000 所以没关系。但是当我只传递 4(如示例中)时,x
函数内的变量变为 1.976262583365e-323#DEN
为什么会这样?
您使用的是旧样式的函数声明,其中参数类型单独列出。请参阅C 函数语法,在参数列表之后声明的参数类型
当您传递一个int
时,默认情况下它不会被转换为float
。但是,您的函数将参数解释为 a float
,这会产生不良结果。
现代方法是在函数声明中包含参数类型,这将允许您的int
参数自动转换为float
.
float square_root(float x)
{
.......
}
具有非原型函数的默认参数提升,并且没有像原型那样转换为参数的类型。所以基本上你int
的价值4
被解释为 afloat
而不是被转换为 a float
。
改用原型定义:
float square_root(float x)
{
.......
}
将函数调用中的参数转换为float
.
另请注意,旧式函数定义是过时的 C 功能,应避免使用。