我想知道,为什么在C中隐式地从一个整数转换为char?
例如:
int i = 2789;
printf("%c\n",i);
会给我一个char,因为它会从最重要的那些开始截断这些位。 但是,如果它意味着你将失去精确度,那么通常你不能真正地暗示,所以我为什么能在这里做呢?
答案 0 :(得分:6)
此处没有隐式演员。
printf
是一个可变参数函数,这意味着在调用函数之前,char
类型的任何参数都会转换为int
。您的参数已经是int
类型,因此不会发生转换。
答案 1 :(得分:0)
传递给函数的所有积分参数通常都会提升为CPU的字大小,因此无论您是通过char
,short
,int
还是long
,无论如何,进入printf
时堆栈和/或寄存器的物理布局都是相同的。
因此,没有“演员”继续进行,只是正常的论证传递。
但这并不是说代码是正确的。参数传递和类型提升在ABI中定义,而不是由C定义,因此它可能不适用于所有平台。 (虽然它适用于绝大多数人。)