如何定義一個指向數組指針的指針?如何定義一個指向指針數組的指針?有何區別?

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),如果不闊上,會優先結合[ ],這樣本質上就是數組不是指針了

總結一句:弄清本質,即到底是一個指針還是數組,那麼本質就先和變量名結合

            

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章