山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向一个变量赋值。
如:
if ( a > b )
max = a;
else
max = b ;
当a > b时将a的值赋给max,当a < b时将b的值赋给max,可以看到无论a > b是否满足,都是给同一个变量赋值。
C提供条件运算符和条件表达式来处理这类问题。可以把上面的if语句改写为
max= ( a > b ) ? a : b;
赋值号右侧的
“( a > b ) ? a:b”是一个“条件表达式”。
“?”是条件运算符。
如果( a > b )条件为真,则条件表达式的值等于a;否则取值b。
如果a等于5,b等于3,则条件表达式“( a > b ) ? a : b”的值就是a的值5,把它赋给变量max,因此max的值为5。
条件运算符由两个符号( ?和:)组成,必须一起使用。要求有3个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符。
条件表达式的一般形式为
表达式1 ?表达式:表达式3
可以这样形象地理解:先计算出表达式1的值,表达式1后面的问号表示“该往哪里走啊?”,有两条路,如果表达式1的值为真(非0),自然直接到表达式2,如为假(0值),就绕过表达式2,到表达式3。
说明:
( 1 )条件运算符的执行顺序:先求解表达式1 ,若为非0 (真)则求解表达式2 ,此时表达求2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3 .表达式3的值就是整个条件表达式的值。赋值表达式max= ( a > b ) ? a : b的执行结果就是将条件表达式的值赋给max,也就是将a和b二者中的大者赋给max。
( 2 )条件运算符优先于赋值运算符,因此赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。
( 3 )上面的例子是利用了条件表达式的值,把它赋给一个变量max。其实也可以不把条件表达式的值赋予一个变量,而在条件表达式中的表达式2和表达式3中对max赋值,并在条件表达式后面加一个分号,就成为一个独立的语句。
如:
a > b ? ( max = a ) : ( max = b );
表达式2和表达式3是赋值表达式相当于:
if ( a > b )
max = a;
else
max = b;
条件表达式还可以写成以下形式:
a > b ? printf ( " % d " , a ) : printf ( " % d " , b )
即“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。
上面条件表达式相当于以下if…else语句:
if ( a > b )
printf ( " % d”,a );
else
printf ( " % d”, b );