宣告函數時,必須遵循型別規則指定返回型別。以下示範各種返回型別的宣告語法:
int MyFunc(); // 返回 int
SOMETYPE MyFunc(); // 返回自訂型別
int* MyFunc(); // 返回 int 指標
SOMETYPE* MyFunc(); // 返回自訂型別指標
SOMETYPE& MyFunc(); // 返回自訂型別參考
若你已理解指標概念,函數返回指標或參考應屬自然推演。關鍵在於函數體內的返回語句:
SOMETYPE* MyFunc(int* p) {
// ...
return p; // 返回傳入的指標
}
SOMETYPE& MyFunc(int& r) {
// ...
return r; // 返回傳入的參考
}
絕對不可 返回函數內部宣告的區域變數記憶體位址。函數返回時,所有區域變數記憶體被釋放,返回的指標/參考將指向無效記憶體 (野指標/懸空參考),外部使用會導致未定義行為 (記憶體洩漏、程式崩潰、資料損毀)。
若指標/參考指向由 new 動態配置的記憶體,則返回是安全的:
SOMETYPE* MyFunc() {
int* p = new int[5]; // 動態配置陣列
// ... 初始化 ...
return p; // 安全:記憶體生命週期超出函數範圍
}
呼叫端負責後續呼叫 delete[] 釋放記憶體。
| 術語 | 定義 |
|---|---|
| 指標 | 儲存記憶體位址的變數,類似參考,但語法與慣用法不同 |
| 參考 | 儲存記憶體位址的變數,類似指標,但語法與慣用法不同 |
| "address of" 運算子 (&) | 返回變數記憶體位址的運算子 |
| 動態記憶體配置 | 程式執行期間顯式配置的連續記憶體區塊 |
| new 運算子 | 配置指定型別記憶體,返回指向該記憶體的指標 |
| delete 運算子 | 釋放指標指向的記憶體,歸還給程式專用的自由記憶體池 |
本系列完結。掌握指標與參考的核心在於理解記憶體模型、生命週期管理與型別系統交互。實踐中請牢記:誰配置、誰釋放;區域變數不出作用域;參考必須初始化且不可重綁定。