0

声明一个二维数组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的指针并不是三级指针,这是为什么?

查看全部 3 个回答

0

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

推荐答案

1

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