为什么printf会在我的程序中输出?

use*_*401 2 c

#include<stdio.h>

int main()
{
    printf("%d",printf("%d %d",2,2) & printf("%d %d",2,2));
}
Run Code Online (Sandbox Code Playgroud)

输出如下: 2 2 2 2 3

我无法弄清楚为什么输出是这样的.有任何想法吗?

aio*_*obe 15

printf 返回打印的字符数,所以这里是解释:

printf("%d",printf("%d %d",2,2) & printf("%d %d",2,2));
\_________/ \_________________/ | \_________________/
     |              |           |          |
     |         prints "2 2"     |    prints "2 2"
     |         and returns 3    |    and returns 3
     |                          |
     |                    computes 3 & 3
     |                   (which equals 3)
     |
 prints "3"
Run Code Online (Sandbox Code Playgroud)

  • @GMan - 6.5,第3段:"运算符和操作数的分组由语法表示.除了稍后指定的(对于函数调用(),&&,||,?:和逗号运算符),顺序为子表达式的评估和副作用的发生顺序都是未经指定的." (3认同)
  • 我更喜欢你的答案. (2认同)