山不在高,有仙則名。水不在深,有龍則靈。 ----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 );