c - 为什么输出不同?

标签 c

请解释为什么它的行为不同。

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

这给出了 stackoverflow8 的输出。但是,如果我删除括号,则:

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

最佳答案

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 的初始声明没有什么不同,在这种情况下,逗号不是运算符,而是分隔符。

关于c - 为什么输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510726/

相关文章:

c - 了解 pcap 包头

c - sqrt() 函数链接错误

c - 如何在 4 字节边界对齐扫描线

回调函数误解

C无法打开文本文件

c - gcc 中的段错误

c - 为什么释放内存会导致段错误?

c - strcmp 不做比较

c - scanf 之后 fgets 不起作用

c - Scanf 输入结转到下一个 scanf