2

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

如果例如:

int i = 2789;

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

会给我一个字符,因为它会从最重要的位开始截断位。但是,如果这意味着你会失去精确度,通常你不能真正隐式施放,那我为什么要在这里做呢?

4

2 回答 2

6

这里没有隐式转换。

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

于 2013-09-28T16:16:25.183 回答
0

传递给函数的所有整数参数通常都会提升为 CPU 的字长,因此无论您传递char、或short,堆栈和/或寄存器在进入时的物理布局无论如何都是相同的。intlongprintf

因此,没有“强制转换”,只是正常的参数传递。

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

于 2013-09-28T16:18:18.347 回答