次の式では、値が大きい方の 変数が y か z かを判別し、大きい方の値を変数 x に代入します。
x = (y > z) ? y : z;
次に等価なステートメントを示します。
if (y > z) x = y; else x = z;
次の式では、関数 printf を呼び出し、c が数字に評価される場合に、 この関数が、変数 c の値を受け取ります。そうでない場合は 、printf は文字定数 'x' を受け取ります。
printf(" c = %c¥n", isdigit(c) ? c : 'x');
条件式の最後のオペランドに代入演算子が含まれる場合は、小括弧を使用して、式が正しい評価を 行うようにします。例えば、次の式では 、= 演算子には ?: 演算子より高い 優先順位が付けられます。
int i,j,k; (i == 7) ? j ++ : k = j;
このコンパイラーは、次のように括弧で囲まれているように解釈されるので、エラーになります。
int i,j,k; ((i == 7) ? j ++ : k) = j;
つまり、k が代入式 k = j 全体としてではなく、 第 3 オペランドとして扱われます。
j の値を k に代入するのは、i == 7 が false のときで、 最後のオペランドを小括弧で囲みます。
int i,j,k; (i == 7) ? j ++ : (k = j);
関連参照