有人知道在预期char
时返回int
时会发生什么?
char testunc1(char a)
{
return a;
}
void main()
{
int x1;
x1 = testfunc1(7);
printf("%d\n",x1);
}
答案 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中的所有算术类型之间存在隐式转换。因此,int
值7
在传递给char
函数时会隐式转换为testunc1
。将testfunc1
返回值分配给x1
时相同(char
返回值转换为int
)。