为什么这个C程序的输出?

Ash*_*ngh 0 c

程序:

   int main( )
    {
    printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出:

5 57 73
Run Code Online (Sandbox Code Playgroud)

我是C的新手,我可以猜到5 57 7来自哪里,但不知道3来自哪里.有人可以解释输出吗?

Let*_*_Be 7

如果您将二进制AND应用于33(这是两个嵌套printf调用的返回值),您将得到3结果.

请注意,代码实际上包含未定义的行为,因为未定义嵌套调用的顺序.

  • 你的意思是*未指明的行为*而不是*未定义的行为*? (2认同)

oua*_*uah 6

printf函数的返回值是传输的字符数,如果有错误则返回负值.

printf("%d %d",5,5)3如果没有错误则返回

printf("%d %d",7,7)3如果没有错误也返回

所以printf("%d %d",5,5) & printf("%d %d",7,7)3 & 3用于求3.