C中指向二维数组的指针为什么不是三级指针?

声明一个二维数组d_arrayint d_array[2][2];
现在已经知道d_array == &d_array[0]
d_array[0] == &d_array[0][0]
所以说有**d_array == d_array[0][0]
说明d_arrayd_array[0][0]的指针的指针,也就是说d_array是一个二级指针
那么我认为指向d_array的指针应该是三级指针,然而对于下列程序

int ***ptr;
ptr = &d_array;

编译器报:warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
也就是说指向d_array的指针并不是三级指针,这是为什么?

阅读 4k
3 个回答

首先,数组名不是指针,但可以向指针转化,就像int转化double。所以数组名和指针这两个概念不要混为一谈,因为有时数组名的imexplict 退化指针确实让人模糊。

其次,对数组名取址,取到的是数组地址,这由此又要提出一个概念,数组指针,例如int a[2],则数组指针int (*p)[2]=&a ,而对于二维数组a2.则有int (*p)[2][2]=&a。

建议楼主看下数组指针与指针数组的区别,后者很容易理解,但前者,其实也不难,但要真正理解它你需要先理解一些其它的c++细节,百度都有,耐心点看,耐心耐心耐心看。

--------------------------------------昨晚手机打的,有些错误,今早已经更新了-----------

http://blog.csdn.net/laojiu_/...

参考下这篇吧,对着编译器监视观察其类型即可。

没有什么二级指针,三级指针的概念,你那个概念不知道从哪里看来的。
一般说的是指向指针的指针指向数组的指针指向数组第一个元素的指针,所以&d_array指向二维数组的指针,与指向指向指针的指针的指针类型就是不同的。

指针没有二级这么一说吧。指针可以指向一维数组,二维数组,三维数组...N维数组,其实C中也没多维数组,只是元素为数组的数组而已。比如N维数组,其实就是元素为(N-1)维数组的一维数组,你要用的是指向(N-1)维度数组的指针,而不是N级指针。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进