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

问题描述

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

#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,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. 编译器会一一求值,返回最后求值的值,即 8。