我知道以下代码的输出将是1000 4但是为什么1000 4不是4 1000?

时间:2015-02-28 23:09:23

标签: c

我知道以下代码的输出将是1000 4,但为什么1000 4不是4 1000?

int a=1000;

printf("%d",printf("%d",a));

5 个答案:

答案 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'正如他们在代码中列出的那样。  但是当实际打印到控制台时,重要的是执行顺序。

顺序是:

  • 首先打印1000,
  • 然后从第一次调用printf返回打印值。

    因此10004

如果您希望看到41000,那么您必须知道在调用之前从printf 返回的值,而且这很好。 ..