将整型值传递给浮点型参数(C语言)

5

这是我的代码片段:

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。
这是为什么呢?

9
你从哪里得到的?那是非常老旧的语法! - iabdalkader
3
撤销添加 [tag:math] 和 [tag:math.sqrt] 标签的操作,因为该问题与数学或平方根函数无关。 - Graham Borland
2个回答

17

您正在使用旧的函数声明方式,其中参数类型单独列出。请参见C函数语法,参数类型在参数列表之后声明

由于您传递了一个int,它不会默认转换为float。然而,您的函数却将参数解释为float,这会产生不良结果。

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

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

6

对于非原型函数,默认使用参数提升,而不是像原型函数那样转换为参数类型。因此,您的值为4的 int 值被解释为 float 类型,而不是被转换为 float 类型。

最好使用原型定义:

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

将函数调用中的参数转换为float类型。

还请注意,旧式的函数定义是C语言中已经被淘汰的特性,应该避免使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接