首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 指標與參考進階:解析 MYCLASS*& 參數的含義與應用場景 C++ 指標與參考進階:解析 MYCLASS*& 參數的含義與應用場景

     編輯:關於C++

論壇常見疑問:void func1(MYCLASS*& pBuildingElement); 為何同時出現 * 與 &?這代表什麼?何時使用?

層層剖析

  1. MYCLASS*:指向 MYCLASS 物件的指標。
  2. void func1(MYCLASS* p):傳值呼叫,函數內修改 p 不影響呼叫端指標。
  3. void func1(MYCLASS** p):傳指標的指標(雙重指標),函數可修改呼叫端指標指向(如 *p = new MYCLASS;)。COM QueryInterface 即此模式。
  4. void func1(MYCLASS*& p):指標的參考。語法上像傳值,實則允許函數修改呼叫端指標本身。呼叫時直接傳指標變數 func1(p),無需 &p。

MYCLASS*& 與 MYCLASS** 功能完全等價,只是語法糖:參考底層即指標,語法上表現為普通變數。

實際應用:MFC CObList::GetAt

class CObList : public CObject {
public:
    CObject*& GetAt(POSITION pos);       // 可修改列表內指標
    CObject* GetAt(POSITION pos) const;  // 唯讀版本
};
  • CObject* p = list.GetAt(pos); → p = other; 僅修改區域變數 p,列表內指標不變。
  • CObject*& rp = list.GetAt(pos); → rp = other; 直接替換列表內該位置的指標。

兩個版本都允許修改物件本身(p->DoSomething()),但只有參考版本允許替換物件。

總結

  • 看到 *& 即聯想 **:函數可能修改呼叫端指標。
  • 呼叫端無需取址,直接傳指標變數。
  • 極少數情況需要(如集合類元素替換),但理解參考機制是邁向 C++ 高手的必經之路。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved