%d是否在C中演员?

时间:2009-11-03 08:48:09

标签: c casting

int a;
printf("%d\n", a);

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

不是。这只是printf()函数的一个“提示”,将'a'参数视为'int'

答案 2 :(得分:5)

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

示例:

printf("%d\n", 1.5);

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

答案 3 :(得分:2)

不,这不是演员,但我建议你看一下printf()的来源来理解这一点。 printf()没有什么特别之处 - 它只是一个类似于其他任何一个的varargs函数。这是你在C学习的第一个函数之一,通常在你学习varargs之前,所以它经常在人们的脑海中突出,特别是当它真的没有时。对来源的快速研究可能会很有启发性。

当你将一个格式字符串传递给printf()时,你告诉函数在它的参数列表中(通常在堆栈上)会发生什么,但这可能与你实际放在那里的内容不一致。使用%d,您告诉printf()从参数列表中取出下一个整数大小的字节块,并将这些字节格式化,就像它们表示带符号的十进制数一样。因此,当printf()解析格式字符串并遇到%d时,它可能会执行以下操作:

int num = va_arg(args, int);

然后格式化并输出“num”中的字节,就像它们是一个整数一样,无论你实际传递什么类型的参数。如果你把一个浮点放在printf()被告知期望一个整数的参数中,那么输出将是IEEE浮点字节的十进制表示 - 可能不是你想要的,而不是真正的转换会做什么。

答案 4 :(得分:0)

不,它是格式说明符。它仅对格式化的I / O函数具有语义含义,并且不是C语言本身的一部分。你可以同样写自己的

它所做的只是指定用于呈现int值的'human readable'表示;没有类型转换或翻译。