#include<stdio.h>
int main(void) {
int a;
a = (1, 2), 3;
printf("%d", a);
return 0;
}
输出: 2
有人可以解释一下输出为什么是2吗?
#include<stdio.h>
int main(void) {
int a;
a = (1, 2), 3;
printf("%d", a);
return 0;
}
输出: 2
有人可以解释一下输出为什么是2吗?
a
被赋值为表达式 (1, 2)
的值,即 2
。逗号后面的 3
对赋值没有影响。 - cmaster - reinstate monica(a = (1, 2)), 3
:执行赋值的子表达式中甚至没有包含数字3。这样是否澄清了问题? - cmaster - reinstate monica有人能解释一下输出为什么是2吗?
在这个语句中:
a = (1, 2), 3;
< p >,
used is a comma operator.
Due to higher operator precedence of =
operator than that of ,
operator, the expression operand (1, 2)
will bind to =
as
< p > ,
被称为逗号操作符。由于=
运算符的优先级高于,
运算符,表达式操作数(1, 2)
将绑定到=
。 (a = (1, 2)), 3;
对于逗号运算符,逗号运算符的左操作数被求值为一个void表达式,然后右操作数会被求值,整个表达式的结果是右操作数的值和类型。
此处有两个逗号运算符。在表达式(1, 2)
中,第一个逗号运算符中,1
被求值为void表达式,然后2
被求值并赋值给a
。
现在a
已经产生了副作用,因此第二个逗号运算符的右操作数3
将被求值,表达式(a = (1, 2)), 3
的值为3
。
的结果:
a = x, y => x
a = (i, j) => j
x = (1 , 2)
a = (1 , 2) , 3 => 2