怎么理解指向二维数组的数组指针是二级指针
2个回答
展开全部
一维数组的名其实就是指针,如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***,理由与二维数组不能直接用二级指针表示一样。
其实说这个有点多余了。
但是二维数组 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***,理由与二维数组不能直接用二级指针表示一样。
其实说这个有点多余了。
追问
你好像把指针数组和数组指针搞反了……
追答
对,我把叫法搞反了。但是解释是没问题的
引用吴道子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***,理由与二维数组不能直接用二级指针表示一样。
其实说这个有点多余了。
一维数组的名其实就是指针,如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***,理由与二维数组不能直接用二级指针表示一样。
其实说这个有点多余了。
展开全部
这个答案把指针数组和数组指针搞反了,重新修改下吧,我第一次看还以为你的是对的,搞了好久才分清
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询