| 特性 | 指針參數 T* p | 引用參數 T& r |
|---|---|---|
| 可為空 | 是 (nullptr) | 否 (必須綁定合法對象) |
| 重新綁定 | 可指向其他對象 p = &other | 初始化後不可改變綁定目標 |
| 語法調用 | func(&obj) 顯式取址 | func(obj) 透明傳遞 |
| 函數內訪問 | p->member / *p | r.member 同對象 |
| 數組退化 | 自然接受 T* | 需 T (&arr)[N] 保留長度信息 |
| 語義 | 「可選的輸入/輸出參數」 | 「必須存在的別名」 |
& 明確表達「可能修改」)operator+(const T&))T* create() 或 unique_ptr)void bad(T& r) { r = T(); } // 僅修改綁定對象的值,不改變綁定關係
void bad2(T* p) { p = new T(); } // 只改變局部指針指向,外部實參指針不變!
若需在函數內修改指針本身指向,必須傳 T** 或 T*&。