为什么输出不同?

时间:2012-07-16 18:55:48

标签: c

请解释我为什么表现不同。

  int main() {
    int p;
    p = (printf("stack"),printf("overflow"));
    printf("%d",p);
    return 0;
  }

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

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

1 个答案:

答案 0 :(得分:13)

The Comma Operator

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

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;

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

int y = a;
int b;

我一开始很想念这个,但这很有道理。它与ab的初始声明没有什么不同,在这种情况下,逗号不是运算符,它是分隔符。