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

C語言參數傳遞機制:傳值、傳址與傳引用的區別

     編輯:關於C

參數傳遞的核心觀念

在 C 語言中,函數參數傳遞只有「傳值」一種機制。所謂「傳址」或「傳引用」,本質上都是透過傳遞指標(位址)來間接修改呼叫端變數的值。

常見混淆點釐清

呼叫端(實參)函數端(形參)說明
sum(a, b)sum(int a, int b)傳值:形參獲得實參的副本,函數內修改不影響外部。
sum(a, b)sum(int *a, int *b)傳址:實參需傳 &a, &b,形參為指標,可透過解參考修改外部變數。
sum(&a, &b)sum(int *a, int *b)同上,明確傳遞位址。

C 語言不支援 C++ 風格的參考型別(int &a),若在 C 程式碼中出現 int &a 會導致編譯錯誤。若需模擬傳引用行為,僅能使用指標參數。

實作範例:交換兩數

#include 

// 傳值版本:無法真正交換外部變數
void swap_by_value(int a, int b) {
    int t = a; a = b; b = t;
}

// 傳址版本:可修改外部變數
void swap_by_address(int *a, int *b) {
    int t = *a; *a = *b; *b = t;
}

int main() {
    int x = 10, y = 20;
    swap_by_value(x, y);
    printf("傳值後: x=%d, y=%d\n", x, y);  // 仍為 10, 20

    swap_by_address(&x, &y);
    printf("傳址後: x=%d, y=%d\n", x, y);  // 變為 20, 10
    return 0;
}

總結

  • C 只有傳值,若需修改呼叫端變數,必須傳遞該變數的位址(指標)。
  • 形參為指標時,函數內透過 *ptr 存取並修改原變數。
  • 切勿混淆 C++ 的參考語法(&),C 中 & 僅為取址運算子。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved