1.首先應明確指針數組和數組指針的區別!
指針數組:int *p1[n]; 本質是一個數組,這個數組每個元素是 int 型的指針類型
(優先級使p先和[n]結合說明這是一個數組,再和*結合)
數組指針:int (*p2)[n]; 本質是一個指針,這個指針指向這個數組
(p首先和 *結合,說明這是一個指針,再和[n]結合)
2.如何定義一個指向數組指針的指針?
如果清楚了數組指針其實是一個指針,如果再定義一個指向這個指針的指針,其實就是一個二級指針
即 int (**s1)[n] = &p2;
推導過程:p2的類型爲 type = int (*)[n]; 即就是定義一個type 類型的指針
type * => int (**)[n];
白話解釋:首先它是一個指針(*s1),這個指針指向一個指針,所以本質(即指針)優先和變量名結合, (**s1),這個指針的指針指向一個數組,
故爲:(**s1)[n];
3.如何定義一個指向指針數組的指針?
指針數組就是一個數組 ,根2一樣其p1 的類型爲:int *[n]
即:int *(*s2)[n] = &p1;
推導過程:首先他是一個指針(*s2),它又是一個指向指針數組的指針,第二個本質是數組,那麼首先和數組[]類型結合,即:(*s2)[],隨後他是一個存放指針的數組:即爲:*(*s2)[]
注意:若是指針,需用括號將變量名和*闊在一起(*s1),如果不闊上,會優先結合[ ],這樣本質上就是數組不是指針了
總結一句:弄清本質,即到底是一個指針還是數組,那麼本質就先和變量名結合