Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么输出不同?_C - Fatal编程技术网

C 为什么输出不同?

C 为什么输出不同?,c,C,请向我解释为什么它的行为不同 int main() { int p; p = (printf("stack"),printf("overflow")); printf("%d",p); return 0; } 这将输出为stackoverflow8。但是,如果我删除了偏执,那么: p=printf(“堆栈”),printf(“溢出”)以堆栈溢出5的形式给出输出 逗号运算符的优先级低于赋值运算符(就这一点而言,它的优先级低于任何运算符),因此,如果删除括号

请向我解释为什么它的行为不同

  int main() {
    int p;
    p = (printf("stack"),printf("overflow"));
    printf("%d",p);
    return 0;
  }
这将输出为stackoverflow8。但是,如果我删除了偏执,那么:

p=printf(“堆栈”),printf(“溢出”)
以堆栈溢出5的形式给出输出

逗号运算符的优先级低于赋值运算符(就这一点而言,它的优先级低于任何运算符),因此,如果删除括号,赋值将首先进行,第二个表达式的结果将被丢弃。所以

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;

一开始我没注意到这一点,但这是有道理的。它与
a
b
的初始声明没有区别,在这种情况下,逗号不是运算符,而是分隔符。

int y=a,b;等于int y=a;和int b@EdS.我用gcc试过你的代码,第三条语句确实给出了“重新声明'b'”和“以前定义'b'”的错误。@abelenky:啊,确实如此,我得到了同样的结果。当我在精神上分析它时,我没有领会到,但它是有意义的。谢谢