首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言條件運算子(三元運算子)完整指南:語法、優先級與巢狀技巧

     編輯:關於C語言

條件運算子 ? : 是 C 語言唯一的三元運算子,能以單一表達式實現「二選一」賦值,使代碼更簡潔、高效。本文系統整理語法規則、優先級陷阱、巢狀用法與實戰範例。

基本語法與語意

expr1 ? expr2 : expr3
  • expr1 為真(非 0)→ 整體值為 expr2。
  • expr1 為假(0)→ 整體值為 expr3。
  • 常用於賦值:max = (a > b) ? a : b;

等價 if-else 對比

// if-else 版
if (a > b) max = a;
else max = b;

// 條件表達式版
max = (a > b) ? a : b;

後者為單一表達式,可直接嵌入其他表達式中(如函式參數、返回值),更具表達力。

三大關鍵規則

1. 優先級:低於關係/算術,高於賦值

max = a > b ? a : b;  // 等價 max = (a > b) ? a : b;

括號可省,但建議保留以提升可讀性。

2. ? 與 : 必須成對出現

不可單獨使用 ? 或 :,否則編譯錯誤。

3. 結合方向:自右向左(右結合)

a > b ? a : c > d ? c : d;

解析為:

a > b ? a : (c > d ? c : d);

此即巢狀條件表達式:expr3 本身又是條件表達式。

巢狀條件表達式:多條件分支

範例 5-8:輸入兩數輸出最大值

#include <stdio.h>

int main(void) {
    int a, b;
    printf("輸入兩數: ");
    scanf("%d%d", &a, &b);
    printf("max=%d\n", a > b ? a : b);
    return 0;
}

三段式分級範例:成績等第

grade = (score >= 90) ? 'A' :
        (score >= 60) ? 'B' : 'C';

右結合特性使此鏈式寫法正確運作,等價:

if (score >= 90) grade = 'A';
else if (score >= 60) grade = 'B';
else grade = 'C';

使用建議與禁忌

場景建議理由
簡單二選一賦值✅ 推薦簡潔、單表達式、無副作用
複雜邏輯/多語句❌ 禁用可讀性崩塌,改用 if-else
函式參數/返回值✅ 推薦避免臨時變數,如 return a>b?a:b;
深層巢狀 (>2 層)⚠️ 謹慎難維護,考慮 switch 或查表

總結

條件運算子是「表達式級的 if-else」,掌握右結合與優先級兩大核心規則,善用於簡單賦值與返回值,能讓代碼更緊湊、函數式風格更濃。濫用巢狀則會製造「寫時讀懂、改時淚流」的維護噩夢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved