怎么理解指向二维数组的数组指针是二级指针

如题所述

一维数组的名其实就是指针,如int a[4]={0}; a就相当于一个指针 int *p=a;没错
但是二维数组 int aa[2][3]={0}; 这个时候是不能用int **pp=aa;是错误的。
实际上二维数组的第一维是int (*ab)[3],是个指针数组,不是数组指针。这个时候int (*ab)[3]是与 int **不同的。所以接受二维数组时要用 int (*ab)[3],不能用二级指针int**pp

数组指针是int *ab[3]这种形式,ab先与[]结合,形成一个一维数组,这个数组的元素都是int*的指针,所以叫做数组指针。这个时候可以用int**p=ab;是对的。因为二级指针只能指向存有int*的位置,而数组内部都是int*的元素。所以数组指针就是二级指针。而二维数组不能直接作为二级指针。它是一维指针数组int (*ab)[]。这个指针数组解释就是首先是一个指针(*ab),然后是一个数组,存放int元素。可以用这个指针ab去访问,**ab第一个元素;*(*ab)[1]第二个元素。

如果是二维数组指针int *ab[2][3];这个时候不能类推,用三级指针int***ppp=ab;是错误的。这个时候第一维其实是int*(*a)[3],是一个指针,然后是个数组,存放3个int* 元素。你不能将int*(*)[]类型直接等价于int***,理由与二维数组不能直接用二级指针表示一样。
其实说这个有点多余了。追问

你好像把指针数组和数组指针搞反了……

追答

对,我把叫法搞反了。但是解释是没问题的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-28
这个答案把指针数组和数组指针搞反了,重新修改下吧,我第一次看还以为你的是对的,搞了好久才分清
相似回答