C将int值传递给float参数

时间:2012-10-26 15:15:48

标签: c

这是我的代码片段:

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

为什么会这样?

2 个答案:

答案 0 :(得分:15)

您正在使用旧式函数声明,其中参数类型单独列出。见C function syntax, parameter types declared after parameter list

当您传递int时,默认情况下它未转换为float。但是,您的函数将参数解释为 float,这会产生不良结果。

现代方法是在函数声明中包含参数类型,这将允许您的int参数自动转换为float

float square_root(float x)
{
     .......
}

答案 1 :(得分:4)

默认参数提升包含非原型函数,并且没有像原型那样转换为参数类型。因此,int的{​​{1}}值基本上被解释为4,而不是转换为float

改为使用原型定义:

float

将函数调用的参数转换为float square_root(float x) { ....... }

另请注意,旧式函数定义是过时的C函数,应该避免使用它们。