C++數組的指針、指針數組、指針數組的指針的聲明有點繞,防止後面繞暈記不住所以記錄下。
指針數組
int *ap[3];
爲啥[3]要放在這裏呢?[]優先級要高於*,所以[3]表明三個元素的數組,剩下的描述元素的類型,*表明數組元素爲指針,int表明指針指向int類型。所以該聲明爲:具有3個指向int類型的指針的數組。
數組的指針
int (*pa)[3];
[3]表明爲三個元素的數組,剩下的部分就是描述元素的類型。(*pi)是一個整體,表明是一個指針變量,變量名爲pa。int表明元素爲int類型。解釋爲:具有3個int類型元素的數組的指針。
指針數組的指針
int *(*pap)[3];
知道指針數組的聲明*ap[3]
,那麼替換ap變量爲一個指針(*apa),代入進去爲*(*apa)[3]
就是指針數組的指針了。
反過來,我們將上面的(*pap)
看成一個叫pa
的變量名爲:int *pa[3];
它就是具有3個指向int類型的指針的數組,那麼該數組的引用,就將pa
這個變量名變爲一個指針變量,替換爲*pap
然後代進去加上括號就是上面的聲明瞭int *(*pap)[3];
:一個具有3個指向int類型的指針的數組的指針。
類型指針啥的太麻煩了,有點記不住,C++11版本新增的auto關鍵字可以省略類型的定義,讓編譯器來判定值的類型。
關於CLion編輯器本地變量定義小技巧
上面一堆指針啥類型啥的,太麻煩了。如果不適用auto關鍵字,想要自己顯示的定義一個複雜的類型,比如"指針數組的指針類型"或者"函數指針數組的指針"的聲明,還是比較費勁的。
CLion的自動創建本地變量的功能很有用。菜單:Main menu | Refactor | Extract | Introduce Variable...
可以生成本地變量。
使用快捷鍵的演示如下:
使用CLion的快速創建變量的功能,很方便的就根據右值創建了左邊的符合的類型變量。
CLion設置裏面keymap搜Introduce Variable可以看到你的快捷鍵。
代碼
int a[3]; //3個int類型元素的數組
a[0]=1;
a[1]=2;
a[2]=3;
int (*pa)[3] = &a; //3個int類型元素的數組的指針
int *ap[3] = {&a[0], &a[1], &a[2]};//3個int類型元素的指針的數組
int *(*pap)[3] = ≈ //3個int類型元素的指針的數組的指針