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

joc*_*ode 2 c integer casting char

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

如果例如:

int i = 2789;

printf("%c\n",i);
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*rth 6

这里没有隐含的演员.

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

  • @Dolda2000:变量函数的参数经历默认参数促销,其中包括整数提升.整数提升声明任何小于`int`的东西都会转换为`int`(或者`unsigned int`,视情况而定).C标准中没有"CPU字大小"的概念. (2认同)