在 C 中将 (2, 6, 8) 赋值给一个整数是什么意思?

What does it mean to assign (2, 6, 8) to an integer in C?

下面这段代码的输出是什么?为什么?

#include <stdio.h>
int main()
{
   int x = (2,6,8);
   printf("%d",x);
   return 0;
}

密码

int x = (2, 6, 8);

使用(非常不常见)逗号运算符。在 C 中,

形式的表达式
expr1, expr2, expr3, ..., exprN

被解释为“评估 expr1 并丢弃其值,然后评估 expr2 并丢弃其值,...,最后评估 exprN使用它求得的值。”因此,在您的情况下,表达式 (2, 6, 8) 表示“评估 2 并丢弃其值,然后评估 6 并丢弃其值,最后评估 8 并使用其值。”这意味着 x 得到值 8.

这段代码几乎可以肯定是一个错误,因为计算 2 和 6 并丢弃它们的值是没有意义的。虽然很少见到逗号运算符,但它最常用于表达式有副作用的上下文中,如

for (x = 0; x < 5; x++, i++) { // Increment both x and i

}

while (x = readValue(), x != 0 && x < 15) { // Read a value into x, then check it

}

它应该是 8,因为逗号充当运算符

  1. 编译器将一个一个地评估值return最后评估的值,即 8。