c-为什么可以将另一种类型的参数传递给函数



考虑以下代码:

void function (char arg)
{
// function's content
}
int main(void)
{
long double x = 1.23456;
function(x);
}

我给这个函数一个不应该得到的参数。为什么它不会导致错误?

它是隐式转换的。

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

请注意,这种隐式转换不是对可变参数(例如格式字符串后的print参数(执行的,因为编译器不知道目标类型是什么。printf("%dn", 1.5)不会将1.5double转换为int;相反,它具有未定义的行为。

对于使用不同类型的运算符计算表达式,也有一些规则。我不会在这里讨论所有的细节,但举个例子:

int n = 42;
double x = 123.4;

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

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

最新更新