C++ Primer Reading Note Chapter 2 (2)

Randy Chen
Randy Chen
Published in
3 min readJul 28, 2019

--

接下來,介紹void*指標,我一開始學有關void這個詞大多是說代表無意義的意思,如果,將void放在一個函式的回傳的位置,就代表該函式沒有要回傳的值,壓根都沒想到它還可以在宣告指標的時候用上。

void*指標

型別void的指標,可以存放任何一種物件的地址。

所以,我們常常在函數的回傳部分設為回傳void*指標,因為它可以接受回傳任何物件的位址,很方便~~

void*雖然有如此強大的功能,但是,我們不能透過void*指標來對它所儲存的位址的對象進行運算

因為,void*雖然可以儲存任何一種物件的地址,但也代表它不知道它所儲存的是哪一種型別的物件,而我們對任何物件進行運算,都必須建立在我們知道它們是哪一種型別的情形下。

有點像英文名字Kevin是一個菜市場名,假設,有十個人叫Kevin,但當你大聲叫Kevin~~~,十個人都回頭,你根本不知道要對誰講話的感覺~~~

接下來,整理一下指標和參考這兩個宣告器擺在同一個宣告的話,它們的交互影響。

首先,對指標的指標(Pointer to Pointer)

就如同字面上的意思,用一個指標來儲存另一個指標的位址,如下圖所示,指標ptr是儲存變數val的位址,而ptr1是個對指標的指標,所以,它儲存的是指標ptr的位址。

int val = 40;

int *ptr = &val;

int **ptr1 = &ptr;

第二,對參考的指標(Pointer to Reference)

這個宣告無法執行,因為參考本身不是物件,它不具有位址,所以,不能這樣進行宣告。

第三,對指標的參考(Reference to Pointer)

當下看到這個宣告方式和第二種宣告方式,有點小小傻眼,一直換來換去加來加去XDD,不過如果照著書上的方式,由右往左讀它的宣告方式,會比較好理解。 首先,是&,代表rptr是一個參考,再來是*,代表它是一個對指標的參考,最後,一個基礎型別int代表它所指向的對象的型別,而它的宣告方式就如下圖中rptr的方式進行宣告,此時,rptr就繫結了指標ptr。

--

--

Randy Chen
Randy Chen

Keep fertilizing it, Keep watering it, Keep marching on