为什么将printf的结果传递给另一个printf工作?

以下代码如何工作?

void main() { printf("%d", printf("earth")); } 

这给出了输出: earth5

printf的返回值是打印的字符数。 内部printf首先被调用。 相当于:

 int rc = printf("earth"); printf("%d", rc); 

这绝对没问题:-)

打印(“地球”)输出接地并返回5(打印的字符数)。

另一个printf获取5作为参数并将其作为整数输出(因为%d)

%d期望一个整数来打印它。 printf返回打印的字符数,然后打印一个5字符串。

它首先评估内部打印以找出打印的字符数,然后评估外部打印5。