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

C++ void 參數傳值不改變實參?形參為副本,需用引用或指針修改實參

     編輯:程式設計綜合問答

現象代碼

void Method(int a, int b) { b = a; }
int main() {
    int a = 125, b = 1;
    Method(a, b);
    cout << b; // 輸出 1,非 125
}

根本原因

C++ 默認傳值調用:函數參數是實參的副本。Method 內部修改 b 僅影響副本,外部實參 b 不變。

修正方案

方案一:引用參數(推薦,語法簡潔)

void Method(int a, int& b) { b = a; } // 形參聲明為引用
// 調用不變:Method(a, b); // 實參 b 被修改為 125

方案二:指針參數(C 風格,需取址)

void Method(int a, int* b) { *b = a; }
// 調用:Method(a, &b); // 傳遞地址

方案三:返回值(函數式風格)

int Method(int a) { return a; }
b = Method(a); // 明確賦值

核心區別表

方式語法可修改實參空值風險適用場景
傳值void f(int x)否無只讀輸入
引用void f(int& x)是無(必須綁定對象)輸出參數、避免拷貝大對象
指針void f(int* x)是有(需判空)C 兼容、可選參數、數組
返回值int f(int x)通過賦值無單一輸出、函數式

最佳實踐

  • 優先用 引用 作為輸出/輸入輸出參數,語義清晰、無空指針風險。
  • 大對象(如 std::vector、std::string)輸入參數用 const T& 避免拷貝。
  • 避免「輸出參數 + 返回值」混用,造成調用者困惑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved