-3

Does someone knows what happens when a char is returned when int is expected?

char testunc1(char a)
{
    return a;
}

void main()
{

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

3 回答 3

5

隐式转换char为.int

在C99 标准的第6.5.16.1节第 2 段中:

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

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

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

由于变量的类型为int,因此返回char值将转换为C99 标准第6.5.16.1int节中指定的类型。

在这种情况下,该值7可以完全由 a 表示int,因此不会发生精度损失,因为7存储在您的int变量中。

于 2013-07-11T12:32:13.917 回答
4

调用函数时int隐式转换为char. 由于char可以拟合高达 127 的值,因此效果很好。稍后,从函数返回的结果被强制转换回int,这当然再次int适合所有可以适合的值char

于 2013-07-11T12:32:51.860 回答
2

C 中的所有算术类型之间都存在隐式转换。因此,此处的int值在传递给函数时7被隐式转换为。将返回值分配给时相同(返回值转换为)。chartestunc1testfunc1x1charint

于 2013-07-11T12:32:20.997 回答