4.3 条件运算符和switch语句

4.3.1 条件运算符

在谈条件运算符之前,先看一个if语句的范例:

上面这段代码很简单,含义是将a、b两个变量中的最大值赋给max变量。其中整个if语句(从if行开始的下面四行都包括在内)可以用如下一行语句代替:

去掉末尾的分号,剩余的(a>b)? a:b就是条件表达式。这个条件表达式是这样执行的:如果(a>b)的条件为真,则取a的值作为整个表达式的值,否则取b的值作为整个表达式的值。

可以看到,条件表达式中用到的“?:”组合被称为条件运算符,条件运算符有三个操作对象,因此也被称为三目运算符,它是C语言中唯一一个三目运算符。其一般形式为:

执行流程如图4.5所示。

图4.5 条件表达式执行流程图

条件运算符的执行顺序:先求解表达式1的值,若为非0(真),则求解表达式2的值,此时表达式2的值就作为整个条件表达式的值,若表达式1的值为0(假),则求解表达式3的值,此时表达式3的值就作为整个条件表达式的值。

所以,“max=(a>b)? a:b;”的求解步骤就是将a和b两个变量中较大的值赋给max。注意,条件运算符优先级高于赋值运算符,所以是先计算条件表达式的值,再将计算结果赋值给max。另外,因为条件运算符优先级比关系运算符低,因此“max=(a>b)? a:b;”可以写成“max=a>b? a:b;”,此外,条件运算符的结合顺序是从右到左,所以,“a>b? a:c>d?c:d;”等价于“a>b? a:(c>d?c:d);”,运算符的优先级与结合性参考表2.6。

条件运算符的使用看个人习惯,使用频率并不太高,因为它的能力比较有限,只能做一些简单判断和计算,但是当看到这种用法的时候也必须要能够认识。