如何定义一个指向数组指针的指针?如何定义一个指向指针数组的指针?有何区别?

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),如果不阔上,会优先结合[ ],这样本质上就是数组不是指针了

总结一句:弄清本质,即到底是一个指针还是数组,那么本质就先和变量名结合

            

 

 

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