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

 我来答
吴道子2011
2017-01-10 · TA获得超过1107个赞
知道小有建树答主
回答量:439
采纳率:0%
帮助的人:368万
展开全部
一维数组的名其实就是指针,如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***,理由与二维数组不能直接用二级指针表示一样。
其实说这个有点多余了。
追问
你好像把指针数组和数组指针搞反了……
追答
对,我把叫法搞反了。但是解释是没问题的
百度网友db2eb23
2018-06-28
知道答主
回答量:1
采纳率:0%
帮助的人:832
引用吴道子2011的回答:
一维数组的名其实就是指针,如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条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式