條件運算式運算子
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
。)
效果是,expression
或 conditional-expression
會被評估,但不會同時評估兩者。
條件式運算結果的類型取決於 expression
或 conditional-expression
運算元的類型,如下所示:
如果
expression
或conditional-expression
具有整數或浮點類型 (其類型可以不同),則運算子會執行通常的算術轉換。 結果的類型是轉換後的運算元類型。如果
expression
和conditional-expression
具有相同結構、等位或指標類型,則結果的類型會是相同的結構、等位或指標類型。如果兩個運算元的類型都是
void
,結果的類型就會是void
。如果任一運算元是任何類型的指標,且另一個運算元是
void
的指標,會將物件的指標轉換為void
的指標,而結果則是void
的指標。如果
expression
或conditional-expression
是指標,且另一個運算元是值為 0 的常數運算式,則結果的類型會是指標類型。
在指標的類型比較中,指標指向之類型的任何類型限定詞 (const
或 volatile
) 都不具意義,但結果類型會繼承條件式之兩個元件的限定詞。
範例
下列範例顯示條件式運算子的用法:
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() );
在此範例中會宣告兩個函式 (f1
和 f2
) 及兩個變數 (x
和 y
)。 稍後在程式中,如果兩個變數具有相同的值,便會呼叫 f1
函式。 否則會呼叫 f2
。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應