首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C/C++ 函數參數傳遞指針與指針的引用(指針指針)的區別:為什麼傳指針無法修改主調函數的指針變量

     編輯:程式設計疑難解答

問題代碼

void func(int *p) {
    p = new int(10); // 修改局部副本
}
int *ptr = nullptr;
func(ptr); // ptr 仍為 nullptr

內存模型解析

指針按值傳遞:函數參數 p 是主調指針 ptr 的副本,兩者指向同一地址。在函數內修改 p(指向新地址)不影響 ptr。

解決方案對比

語言語法調用示例原理
Cvoid 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)避免手動內存管理,參數傳遞用引用或值傳遞智能指針。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved