为什么我可以隐式地将整数转换为C中的char

时间:2013-09-28 15:33:22

标签: c casting integer char

我想知道,为什么在C中隐式地从一个整数转换为char?

例如:

int i = 2789;

printf("%c\n",i);

会给我一个char,因为它会从最重要的那些开始截断这些位。 但是,如果它意味着你将失去精确度,那么通常你不能真正地暗示,所以我为什么能在这里做呢?

2 个答案:

答案 0 :(得分:6)

此处没有隐式演员。

printf是一个可变参数函数,这意味着在调用函数之前,char类型的任何参数都会转换为int。您的参数已经是int类型,因此不会发生转换。

答案 1 :(得分:0)

传递给函数的所有积分参数通常都会提升为CPU的字大小,因此无论您是通过charshortint还是long,无论如何,进入printf时堆栈和/或寄存器的物理布局都是相同的。

因此,没有“演员”继续进行,只是正常的论证传递。

但这并不是说代码是正确的。参数传递和类型提升在ABI中定义,而不是由C定义,因此它可能不适用于所有平台。 (虽然它适用于绝大多数人。)