C++二級指針和指針的引用
目的:形參指針改變實參指針所指向的對象(即地址)
舉例:pointer
指針指向白鴨子whiteDuck
,如果想要設計一個函數,這個函數能夠令pointer指向黑鴨子blackDuck。
圖示如下:
代碼簡示如下:
Duck *duck = &oldDuck; someFunction(duck); // 此時duck指向newDuck;
1、形參與實參均為指針時達不到此目的
此時,二者指向同一地址,可以對同一對象進行操作。但是形參指針不能改變實參指針所指向的地址,因為二者是兩個完全無關的指針對象。函數傳遞參數時,將實參指針的值傳遞給形參指針,是一個值傳遞的過程。
2、解決方案——指針引用或二級指針
為瞭讓函數能夠更改實參指針所指向的地址,需要將實參的地址傳入函數。
此時有兩種策略來實現目的:
- 形參為二級指針**p;
- 形參為指針引用*&p;
下面分別對兩種方式進行介紹,並提供相應的代碼。
其中Duck類的定義如下:
class Duck { public: Duck(int color) { this->color = color; } // 0表示白色,1表示黑色 int color = 0; };
(1)形參為二級指針**p
此時,實參為指針的地址,形參為指針的指針,即形參指向實參。形參對實參進行操作,而不是對實參指向的地址進行操作。
void changeObject(Duck **p) { *p = new Duck(1); } // 調用方式 changeObject(&pointer);
(2)形參為指針引用*&p
指針引用即指針的引用,指針引用同樣是針對指針進行操作,而不是針對指針指向的地址進行操作:
void changeObject(Duck *&p) { p = new Duck(1); } // 調用方式 changeObject(pointer);
3、總結
不管是C還是C++,指針都是非常重要的概念,使用的頻率也較高。二級指針和指針引用並不是完全相等的兩個概念,比如引用不能改變其指向的對象,但是指針可以指向任意的對象。
到此這篇關於C++二級指針和指針的引用的文章就介紹到這瞭,更多相關C++指針引用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Go語言的接口詳解
- C++構造函數+復制構造函數+重載等號運算符調用
- C++類的繼承和派生及指針安全引用
- C++使用new和delete進行動態內存分配與數組封裝
- C++函數指針+對象指針+this指針+指向類靜態和非靜態成員的指針