声明一个二维数组d_array
:int d_array[2][2];
现在已经知道d_array == &d_array[0]
且d_array[0] == &d_array[0][0]
所以说有**d_array == d_array[0][0]
说明d_array
是d_array[0][0]
的指针的指针,也就是说d_array
是一个二级指针
那么我认为指向d_array
的指针应该是三级指针,然而对于下列程序
int ***ptr;
ptr = &d_array;
编译器报:warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
也就是说指向d_array
的指针并不是三级指针,这是为什么?
首先,数组名不是指针,但可以向指针转化,就像int转化double。所以数组名和指针这两个概念不要混为一谈,因为有时数组名的imexplict 退化指针确实让人模糊。
其次,对数组名取址,取到的是数组地址,这由此又要提出一个概念,数组指针,例如int a[2],则数组指针int (*p)[2]=&a ,而对于二维数组a2.则有int (*p)[2][2]=&a。
建议楼主看下数组指针与指针数组的区别,后者很容易理解,但前者,其实也不难,但要真正理解它你需要先理解一些其它的c++细节,百度都有,耐心点看,耐心耐心耐心看。
--------------------------------------昨晚手机打的,有些错误,今早已经更新了-----------
http://blog.csdn.net/laojiu_/...
参考下这篇吧,对着编译器监视观察其类型即可。