c 中 指標的指標 與 指標的引用

2021-06-25 19:25:08 字數 1632 閱讀 6260

~~~~我的生活,我的點點滴滴!!

今天在看一些c++開源**時,無意間看到下面這段**,突然發覺看起好陌生,完全不懂這樣用的意義是什麼呀?

void director::popscene(const std::function& callback)  

else

} }auto callback = (scene*& scene);

director::getinstance()->popscene(callback);

下面的callback = (scene *& scene){}; 這是c++ 11的新語法,這裡我不在科普了,前面的blog文中有講到,主要是看下這個繞眼的符號" *& "

這表示是什麼意思,我經常見到" ** "但是我自己不用,我也煩這樣使用的人。

今天見到這個後,我更加費解了。這樣用的意思是什麼?為什麼要這

void director::popscene(const std::function& callback)

我們拋開std::function()這個功能不說,只單純講 void func1( scene *& pscene );這個函式宣告中" *& "的意義。在某種意義上,"*"和"&"是

意思相對的兩個東西,把它們放在一起有什麼意義呢?。為了理解指標的這種做法,我們先複習一下c/c++程式設計中無所不在的指標概念。我們都知道

scene*的意思:指向某個物件的指標,此物件的型別為scene。

scene* p = new scene();

func1(p);

void func1(scene *pscene)

上面這段**的這種處理方法想必誰都用過,建立乙個scene物件,然後將它傳入func1函式。現在假設此函式要修改pscene: 上面第二條語句在函

數過程中只修改了pscene的值,前沒有修改上面呼叫者func1(p)的值,如果p指向某個位於位址0x008a00的物件,當func1返回時,它仍然指向這個

特定的物件。現在假設你想要在func1中修改p的值。這是你的權利。呼叫者傳入乙個指標,然後函式給這個指標賦值。以往一般都是傳雙指標,即

指標的指標,例如,scene**。

func1(p); 

void func1(scene *& pmyclass);

其實,它和前面所講得指標的指標例子是一碼事,只是語法有所不同。傳遞的時候不用傳p的位址&p,而是直接傳p本身:

scene* p = null; 

func1(p); 

在呼叫之後,p指向乙個新的物件。一般來講,引用的原理或多或少就象乙個指標,從語法上看它就是乙個普通變數。所以只要你碰到*&,就應該想

到**。也就是說這個函式修改或可能修改呼叫者的指標,而呼叫者象普通變數一樣傳遞這個指標,不使用位址操作符&。

我們回歸到最開始的**,看callback(_nextscene);這一行**,_nextscene應該是類的成員變數,他需要保持和關心這個別人對他自己的一些操作

與處理,也就是在別的地方改變了值,需要反饋回來,故用了 "*&" ,現在問題就開朗多了。

C 中 指標引用)與 (指標)的區別

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...

C 中指標 與指標引用 的區別

c 中 指標引用 與 指標 的區別 指標是乙個存放位址的變數,指標引用指的是這個存放位址的變數的引用。c 中如果引數不是引用的話,會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件即想要改變指標變數裡存放的位址,就要使用指標引用。下面用乙個測試例子和過程圖結合進行說明 分析 在test...

C 中 (指標引用)和 (指標)的區別

很久之前學的c 了,複習一下,指標是乙個存放位址的變數,而指標引用指的是這個變數的引用,眾所周知c 中如果引數不是引用的話會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件 換句話說,就是要改變指標裡面存的位址 就要使用指標引用,在網上看到大佬的 簡單明瞭,如下 include usi...