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

Kar*_*ena -8 c comma-operator

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

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

tem*_*def 9

编码

int x = (2, 6, 8);
Run Code Online (Sandbox Code Playgroud)

使用(非常不常见的)逗号运算符。在 C 中,形式的表达式

expr1, expr2, expr3, ..., exprN
Run Code Online (Sandbox Code Playgroud)

被解释为“评估expr1并丢弃其值,然后评估expr2并丢弃其值,......,最后评估exprN使用其评估为的值”。因此,在您的情况下,该表达式的(2, 6, 8)意思是“评估 2 并丢弃其值,然后评估 6 并丢弃其值,最后评估 8 并使用其值”。这意味着x获取 value 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

}
Run Code Online (Sandbox Code Playgroud)

  • @AndrewTruckle 当然,但你说的是“整个概念”:) (4认同)
  • @AndrewTruckle 毫无意义什么?逗号运算符?嗯,最好使用逗号运算符将多个表达式算作一个(如“for”循环示例中的那样)然后,运算符必须返回一个值。不过,最后一个的选择是相当随意的。 (2认同)