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

C 語言形參實參機制深度解析:為什麼 swap 必須傳指針?

     編輯:關於C語言

核心概念

  • 形式參數(形參):函數定義時聲明的變量,僅在函數調用時分配內存,調用結束銷毀。
  • 實際參數(實參):函數調用時傳入的具體值或變量。

C 語言只有值傳遞:實參的值被複製給形參,函數內修改形參不影響實參。

錯誤示範:值傳遞 swap

void swap(int a, int b) {
    int t = a; a = b; b = t; // 僅交換了副本
}
int main() {
    int x=1, y=2;
    swap(x, y); // x,y 不變
}

正確做法:傳遞地址(指針)

void swap(int *a, int *b) {
    int t = *a; *a = *b; *b = t; // 通過地址修改原內存
}
int main() {
    int x=1, y=2;
    swap(&x, &y); // 傳遞變量地址
    // x=2, y=1
}

內存圖解

main 棧幀:  x: 1   y: 2
                │     │
                ▼     ▼
swap 棧幀:  a: &x  b: &y  (指針變量)
                │     │
                ▼     ▼
           內存: *a=1  *b=2  ← 真正被修改的位置

進階理解

  • 若想修改指針本身(如鏈表頭插入),需傳指針的指針(**p)或返回新指針。
  • 數組名作參數自動退化為指針,故數組修改可直接生效,無需 &。
  • const int *p vs int *const p:前者限制指向的值不可改,後者限制指針指向不可改。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved