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

C語言條件判斷與參數傳遞深度解析:三元運算符、if-else、形參實參機制

     編輯:C 語言問答

條件表達式 vs 語句

構造類別有值可嵌套典型用途
cond ? expr1 : expr2表達式是是初始化、返回值、函數參數
if (cond) stmt1; else stmt2;語句否是 (塊)流程控制、副作用操作

三元運算符進階用法


// 1. 返回賦值表達式的值 (左值)
int a=1, b=2, c;
c = (a > b ? a : b) = 100;  // 將較大者設為 100

// 2. 避免重複計算
printf("%d\n", (x = foo()) > 0 ? x : -x);  // foo() 只調用一次

// 3. 指針選擇
int *p = flag ? &a : &b;
*p = 20;  // 修改 a 或 b

形參與實參機制:值傳遞本質

  • **C 語言只有值傳遞** (Call by Value)。
  • 函數調用時,**實參的值被複製** 給形參 (對基本類型是數值,對指針是地址)。
  • **形參修改不影響實參** (基本類型);**形參指向的內容修改影響實參指向的對象** (指針)。

void swap_bad(int a, int b) {  // 複製品交換,無效
    int t = a; a = b; b = t;
}

void swap_good(int *a, int *b) { // 傳遞地址,修改原對象
    int t = *a; *a = *b; *b = t;
}

int main() {
    int x=1, y=2;
    swap_bad(x, y);   // x,y 不變
    swap_good(&x, &y); // x=2, y=1
    return 0;
}

「判斷表達式返回語句」的誤區澄清

C 無「返回語句」概念。**表達式有值**,**語句無值**。若需在條件分支執行複雜邏輯,**必須用 if-else 塊**,或將邏輯封裝為函數返回值。


// 錯誤想法:cond ? (a=b+c) : (a=b*c);  // 只是表達式,可賦值
// 正確:if (cond) a = b + c; else a = b * c;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved