void func(int *p) {
p = new int(10); // 修改局部副本
}
int *ptr = nullptr;
func(ptr); // ptr 仍為 nullptr
指針按值傳遞:函數參數 p 是主調指針 ptr 的副本,兩者指向同一地址。在函數內修改 p(指向新地址)不影響 ptr。
| 語言 | 語法 | 調用示例 | 原理 |
|---|---|---|---|
| C | void func(int **pp) | func(&ptr); | 傳遞指針地址,函數通過 *pp = new int 修改原指針 |
| C++ | void func(int *&rp) | func(ptr); | 引用參數別名,直接操作原指針 |
// C 風格
void funcC(int **pp) { *pp = (int*)malloc(sizeof(int)); **pp = 10; }
int *p = NULL; funcC(&p); // p 指向新內存
// C++ 風格
void funcCpp(int *&rp) { rp = new int(10); }
int *p = nullptr; funcCpp(p); // p 指向新內存
bool TryGetValue(key, out Value)。C++ 推薦使用智能指針(unique_ptr/shared_ptr)避免手動內存管理,參數傳遞用引用或值傳遞智能指針。