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);
}
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);
}
被隐式转换char
为.int
在C99 标准的第6.5.16.1节第 2 段中:
在简单赋值(
=
) 中,右操作数的值被转换为赋值表达式的类型,并替换存储在左操作数指定的对象中的值。
赋值表达式的类型在第6.5.16节第 3 段中定义:
赋值表达式的类型是左操作数的类型,除非左操作数具有限定类型,在这种情况下,它是左操作数类型的非限定版本。
由于变量的类型为int
,因此返回char
值将转换为C99 标准第6.5.16.1int
节中指定的类型。
在这种情况下,该值7
可以完全由 a 表示int
,因此不会发生精度损失,因为7
存储在您的int
变量中。
调用函数时int
隐式转换为char
. 由于char
可以拟合高达 127 的值,因此效果很好。稍后,从函数返回的结果被强制转换回int
,这当然再次int
适合所有可以适合的值char
。
C 中的所有算术类型之间都存在隐式转换。因此,此处的int
值在传递给函数时7
被隐式转换为。将返回值分配给时相同(返回值转换为)。char
testunc1
testfunc1
x1
char
int