C++ 函式參數傳遞方式有三種:值傳遞、指標傳遞、引用傳遞。理解它們的差異關鍵在於「形參」與「實參」的綁定關係,以及函式內部修改是否影響外部實參。
形參是實參的拷貝,單向傳值(實參 → 形參),函式內修改形參不影響外部實參。
#include <iostream>
using namespace std;
void func(int x) {
x = x + 10;
}
int main() {
int n = 0;
func(n);
cout << n << endl; // 輸出 0
return 0;
}
傳遞實參的記憶體位址,形參為指標。透過解參考修改指向的記憶體,會改變外部實參值。
void func(int *x) {
*x = *x + 10;
}
int main() {
int n = 0;
func(&n);
cout << n << endl; // 輸出 10
return 0;
}
形參是實參的別名,兩者綁定同一記憶體位置。修改形參等同修改實參。
void func(int &x) {
x = x + 10;
}
int main() {
int n = 0;
func(n);
cout << n << endl; // 輸出 10
return 0;
}
宣告 int n = 1; 時:
1 存放於某記憶體位址。n 是該位址的「大名」(變數名)。int &ref = n; 給同一位址取「小名」(引用),大名、小名指向同一值。| 傳遞方式 | 適用情境 | 副作用 |
|---|---|---|
| 值傳遞 | 小型物件、不需修改實參、需語意上獨立拷貝 | 拷貝成本、無法回傳修改 |
| 指標傳遞 | 需修改實參、可選參數(傳 nullptr)、C 風格介面、大型物件避免拷貝 | 需檢查空指標、語法較繁瑣 |
| 引用傳遞 | 需修改實參、運算子多載、串流操作、大型物件避免拷貝 | 不可為空、初始化後不可重綁定 |