C语言:我不明白为什么它有效

时间:2013-07-11 12:29:54

标签: c

有人知道在预期char时返回int时会发生什么?

char testunc1(char a)
{
    return a;
}

void main()
{

    int x1;
    x1 = testfunc1(7);
    printf("%d\n",x1);
}

3 个答案:

答案 0 :(得分:5)

char 被隐式转换为int

在C99标准的 6.5.16.1 第2节中:

  

简单赋值=)中,右操作数的值将转换为   赋值表达式并替换存储在左侧指定的对象中的值   操作数。

赋值表达式的类型 6.5.16 第3段中定义:

  

赋值表达式的类型是左操作数的类型,除非   左操作数具有限定类型,在这种情况下,它是类型的非限定版本   左操作数。

由于变量的类型为int,因此返回的char值将转换为类型int,如C99标准 6.5.16.1 部分所述

在这种情况下,值7可以完全由int表示,因此7存储在int变量中时不会出现精度损失。

答案 1 :(得分:4)

调用函数时,int被隐式强制转换为char。由于char的值最大可达127,因此效果很好。之后,该函数返回的结果将被强制转换回int,当然int符合char中适合的所有值。

答案 2 :(得分:2)

C中的所有算术类型之间存在隐式转换。因此,int7在传递给char函数时会隐式转换为testunc1。将testfunc1返回值分配给x1时相同(char返回值转换为int)。