共用方式為


條件運算式運算子

C 有一個三元運算子:條件式運算式運算子 (? :)。

語法

conditional-expression
logical-OR-expression
logical-OR-expression ? expression : conditional-expression

logical-OR-expression 必須具有整數類型、浮點類型或指標類型。 它會根據與 0 的等效性進行評估。 在 logical-OR-expression 之後是一個序列點。 評估運算元的方式如下:

  • 如果 logical-OR-expression 不等於 0,則會評估 expression。 運算式的評估結果由非終端符號 expression 給出。 (這表示只有在 logical-OR-expression 為 true 時才會評估 expression。)

  • 如果 logical-OR-expression 等於 0,則會評估 conditional-expression。 運算式的結果是 conditional-expression 的值。 (這表示只有在 logical-OR-expression 為 false 時才會評估 conditional-expression。)

效果是,expressionconditional-expression 會被評估,但不會同時評估兩者。

條件式運算結果的類型取決於 expressionconditional-expression 運算元的類型,如下所示:

  • 如果 expressionconditional-expression 具有整數或浮點類型 (其類型可以不同),則運算子會執行通常的算術轉換。 結果的類型是轉換後的運算元類型。

  • 如果 expressionconditional-expression 具有相同結構、等位或指標類型,則結果的類型會是相同的結構、等位或指標類型。

  • 如果兩個運算元的類型都是 void,結果的類型就會是 void

  • 如果任一運算元是任何類型的指標,且另一個運算元是 void 的指標,會將物件的指標轉換為 void 的指標,而結果則是 void 的指標。

  • 如果 expressionconditional-expression 是指標,且另一個運算元是值為 0 的常數運算式,則結果的類型會是指標類型。

在指標的類型比較中,指標指向之類型的任何類型限定詞 (constvolatile) 都不具意義,但結果類型會繼承條件式之兩個元件的限定詞。

範例

下列範例顯示條件式運算子的用法:

j = ( i < 0 ) ? ( -i ) : ( i );

這個範例會將 i 的絕對值指派為 j。 如果 i 小於 0,會將 -i 指派至 j。 如果 i 大於或等於 0,則會將 i 指派至 j

void f1( void );
void f2( void );
int x;
int y;
    .
    .
    .
( x == y ) ? ( f1() ) : ( f2() );

在此範例中會宣告兩個函式 (f1f2) 及兩個變數 (xy)。 稍後在程式中,如果兩個變數具有相同的值,便會呼叫 f1 函式。 否則會呼叫 f2

另請參閱

條件式運算子:? :