为什么输出不同?

h4c*_*k3d 6 c

请解释一下为什么它的行为不同.

  int main() {
    int p;
    p = (printf("stack"),printf("overflow"));
    printf("%d",p);
    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

这将输出作为stackoverflow8.但是,如果我删除了paranthesis,那么:

p = printf("stack"),printf("overflow"); 给出输出为 stackoverflow5

Ed *_* S. 13

逗号运算符

逗号运算符的优先级低于赋值(它的优先级低于任何运算符),因此如果删除括号,则首先进行赋值,并丢弃第二个表达式的结果.所以...

int a = 10, b = 20;
int x = (a,b); // x == 20
int y = a,b;   // y == 10
// equivalent (in terms of assignment) to
//int y = a;
Run Code Online (Sandbox Code Playgroud)

请注意,第三行将导致错误,因为它被解释为重新声明b,即:

int y = a;
int b;
Run Code Online (Sandbox Code Playgroud)

我起初错过了这个,但这很有道理.它与a和的初始声明没有什么不同b,在这种情况下,逗号不是运算符,它是一个分隔符.

  • int y = a,b; 相当于int y = a; 和int b; (2认同)