C语言中,当不同的运算符放在一个表达式中进行混合运算时,运算顺序是根据运算符的优先级而定的,优先级高的运算符先运算,优先级低的运算符后运算。例如在算术运算时,乘和除的优先级要高于加和减,像这种在表达式中产生不同运算顺序的性质称做运算符的优先级。
在同一表达式中,如果各运算符有相同的优先级,运算顺序是从左向右,还是从右向左,是由运算符的结合性决定的。所谓结合性是指运算符可以和左边的表达式结合,也可以和右边的表达式结合。如表 3-2 所示为运算符优先级与结合性。
括号、数组下标符和结构成员运算符优先级最高,其次是一元运算符(单目运算符)等,优先级最低的是逗号运算符。其中一元运算符、条件运算符和赋值运算符执行从右到左的结合性。
表 3-2 运算符优先级与结合性
范例 3.1
PriorityAndCombine.c
PriorityAndCombine.c 这里使用多运算符的表达式演示不同优先级的运算符组合运算所产生的结果。程序定义变量a,b,c,并使用复合赋值运算符+=验证复合赋值运算符的功能。
(光盘\chat3\ PriorityAndCombine.c)
程序第 8 行按照优先级应先计算乘(*),然后计算加(+),最后执行赋值(=)。由于赋值是自右至左的右结合性,因此先计算赋值号右边的表达式a+c*10,结果为 210,然后将结果赋值给b。
程序第 9 行由算术运算和赋值组成,且赋值操作为右结合性,因此先执行算术操作c-5,结果为 15。+=运算符为复合赋值运算符,a+=15 等价于a=a+15,执行后a的值变为 25。该操作分为两个步骤,请参看章后疑难分析。
最后将a的值 25 赋给c,因此c的值也变为 25。
程序运行输出结果: