參數是函數/過程之間傳遞數據的通道。調用者通過參數將「鑰匙」(數據或地址)遞給被調用者,被調用者由此進入「房間」(函數體)完成工作。
| 模式 | 本質 | C/C++ 語法 | 特點 |
|---|---|---|---|
| 值傳遞 | 複製實參副本 | void f(int x) | 函數內修改不影響外部;大對象開銷大 |
| 指針/引用傳遞 | 傳遞地址(間接訪問) | void f(int* p) / void f(int& r) | 可修改外部變量;實現輸出參數、大對象零拷貝 |
| 共享傳遞 | 傳遞對象引用(Java/Python 風格) | 語言層面自動處理 | 不可變對象安全;可變對象需警惕副作用 |
棧幀佈局(x86 cdecl 約定):
[返回地址] [舊EBP] [參數3] [參數2] [參數1] ← 參數從右向左壓棧
調用約定決定:誰清理棧、寄存器傳參規則、名字修飾。
void f(int arr[]) 實為 int*,丟失長度資訊 → 傳長度或用 std::span/std::vector。const,輸出參數用非 const 指針/引用,編譯器輔助防誤改。const T& 傳大對象(只讀)。T&;需轉移所有權用 T&& / std::unique_ptr。std::optional / std::expected / 結構體返回值(C++17/23)。參數傳遞是「數據如何跨越函數邊界」的協議。理解值 vs 地址、所有權 vs 借用、調用約定三個維度,即可在系統編程中游刃有餘。