void main()
int a,b,c;
c=(a,b)
这会给c=b
而
c=a,b
给出c=a
。
上述两个原因是什么?
答案 0 :(得分:11)
在这一行:
c=(a,b)
括号表示“先评估表达式a,b
,然后将值指定给c
。”在这种情况下,b
被分配,因为它是a,b
的右侧表达式。在C中,comma expressions从左到右进行评估,总值是最右边的表达式。
在这一行中:
c=a,b
首先将分配评估为整个左侧,即c=a
。这是因为相等的=
运算符优先于逗号,
运算符。因此,b
根本不会被分配到c
。它相当于:
(c=a),b
答案 1 :(得分:3)
在C中,逗号运算符计算第一个操作数,然后丢弃它,然后计算右操作数。所以结果是正确的操作数。它的优先级最低。
c = (a,b)
()的优先级高于,因此a,b首先求值。结果是b。所以c = b。
但是当使用c = a时,b赋值=具有更高的优先级。所以c = a首先评估。因此a被分配给c。
查看this了解更多详情。