在 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,因为逗号充当运算符
- 编译器将一个一个地评估值return最后评估的值,即 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, 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,因为逗号充当运算符
- 编译器将一个一个地评估值return最后评估的值,即 8。