表達式1 ? 表達式2 : 表達式3
// if-else 版 if (a > b) max = a; else max = b; // 條件運算符版(一行搞定) max = (a > b) ? a : b;
條件運算符可視為簡寫版 if-else,完全可互換。
max = a > b ? a : b; 等價於 max = (a > b) ? a : b;(括號可省)? 和 : 是成對運算符,不可分開a > b ? a : c > d ? c : d; // 右結合理解為: a > b ? a : (c > d ? c : d);
即:若 a>b 則結果 a;否則結果為 (c>d ? c : d) 的值。
#include <stdio.h>
int main() {
int a, b;
printf("Input two numbers: ");
scanf("%d %d", &a, &b);
printf("max=%d\n", a > b ? a : b);
return 0;
}
Input two numbers: 23 45 max=45
printf("Max: %d\n", a > b ? a : b);
int max(int a, int b) {
return a > b ? a : b;
}
// 危險:副作用重複/遺漏 max = a++ > b ? a++ : b; // a 可能增 1 或 2 次 // 安全:先計算條件 int cond = a > b; max = cond ? a : b;
| 場景 | 推薦 | 理由 |
|---|---|---|
| 簡單賦值/返回值選擇 | 條件運算符 | 簡潔、表達式語境 |
| 複雜邏輯、多語句、調試 | if-else | 可讀性強、易設置斷點 |
| 多條件分支 | if-else if / switch | 條件運算符嵌套難讀 |