%da是否在C中投射?

1 c casting

int a;
printf("%d\n", a);
Run Code Online (Sandbox Code Playgroud)

我想知道%d是不是演员?

Sea*_*ney 5

不,它是printf()函数的第一个参数的格式说明符字符串的一部分; 格式字符串.它将打印出您作为第二个参数传递的int的十进制表示.


Ale*_*tov 5

它不是.这只是printf()函数的一个"提示",将'a'参数视为'int'


for*_*ran 5

在任何情况下,它都不是演员而是重新解释(比如获取地址,转换为不同类型的指针,然后将内容作为新类型).

例:

printf("%d\n", 1.5);
Run Code Online (Sandbox Code Playgroud)

不会打印整数1,而是1.5IEEE 754中表示的整数值.如果要进行强制转换,则必须显式放在(int)值的前面.

  • 作为IEEE-754 double的`1.5`具有表示"0x3ff8000000000000".假设你的平台有32位整数,这里的printf语句最有可能产生"0"或"1073217536",具体取决于字节顺序. (4认同)
  • 实际上,当您调用**Undefined Behavior**时,它可以执行任何操作.它可以打印"四十二"或格式化您的硬盘. (3认同)
  • @pmg好,行为是未定义但可预测的...如果你试图将较大的类型解释为较小的类型,但是一个double(如1.5)至少与int一样大(在32和64位架构,我不知道将来会发生什么).在这种情况下,在我的机器中它只打印0,因为英特尔的endiannes,它取1.5的下半部分恰好为零.在一台大端机器上,它会打印出"1073217536",我猜. (2认同)