关于在C中使用括号

时间:2010-11-15 04:18:13

标签: c operators

void main()
int a,b,c;
c=(a,b)

这会给c=b

c=a,b 

给出c=a

上述两个原因是什么?

2 个答案:

答案 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了解更多详情。