为什么可以将其他类型的参数传递给函数?

时间:2020-09-10 18:40:33

标签: c function

请考虑以下代码:

void function (char arg)
{
    // function's content
}

int main(void)
{
    long double x = 1.23456;

    function(x);
}

我给函数一个不应该得到的参数。为什么不引起错误?

2 个答案:

答案 0 :(得分:4)

它是隐式转换的。

在赋值,参数传递,return语句以及其他几个上下文中,如果目标类型也是算术类型,则任何算术类型的表达式都将隐式转换为目标类型。在这种情况下,double参数将隐式转换为char。 (这种特殊转换很少有意义,但就语言而言是有效的。)

请注意,对于可变参数(例如格式字符串后的print的参数),不会完成此隐式转换,因为编译器不知道目标类型是什么。 printf("%d\n", 1.5)不会将1.5double转换为int;而是具有未定义的行为。

还有一些使用不同类型的运算符评估表达式的规则。我不会在这里详细介绍所有细节,但例如:

int n = 42;
double x = 123.4;

如果您写n + x,则在执行加法之前,n的值将从int提升(隐式转换)到double

答案 1 :(得分:2)

在您的示例中,double类型被隐式转换为char