我知道以下代码的输出将是1000 4,但为什么1000 4不是4 1000?
int a=1000;
printf("%d",printf("%d",a));
答案 0 :(得分:6)
我想你忘了,首先打印printf作为参数,然后将返回值用作外部printf语句的参数!这就是你得到的原因:
10004
printf("%d", printf("%d",a));
//^^^^ //^^^^^^ 1. prints 1000
//| //| 2. return value get's used for the outer printf statement
//| 3. prints the return value of the inner printf statement 4
答案 1 :(得分:1)
printf
函数将格式化的字符串写入stdout
,并返回写入的字符数。在开始时,它写入a
的值为1000;之后返回4
,并传递给打印printf
的外部4
调用,从而输出10004
。
换句话说,必须在进行函数调用之前评估参数; printf("%s", a)
的结果作为另一个printf
的参数给出,因此必须在之前评估其值可以调用外部printf
。
答案 2 :(得分:0)
在调用函数之前计算函数的参数。
首先执行 printf("%d",a)
,然后输出1000
,然后调用printf("%d",4)
,输出4
答案 3 :(得分:0)
printf
,成功时返回int
,等于写入的字符数。首先调用内部printf
,打印1000,然后打印printf
(即4)的返回。
答案 4 :(得分:0)
您正在查看那些' printfs'正如他们在代码中列出的那样。 但是当实际打印到控制台时,重要的是执行顺序。
顺序是:
然后从第一次调用printf返回打印值。
因此10004
。
如果您希望看到41000
,那么您必须知道在调用之前从printf 返回的值,而且这很好。 ..