问题描述
#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,因为逗号是操作符
,- 编译器会一一求值,返回最后求值的值,即 8。