1)为了帮助你理解,我们先来看看最浅的例子:
int B[4]={0};
这个是什么意思?
首先,它是一个一维的数组,有四个元素,在内存中申请了一块连续的空间(数组的空间都是连续的),0是这组数的首地址。想象一把尺上面,0-4cm是这四个元素所在的空间,所以首地址为0(cm的位置),“也是第一个元素的地址”。.
如果我们 int * p=B; 会有什么情况? p与B的值一样,都是0,都是这个数组的第一个元素的地址,所以p是指向这个大小为4的数组的第一个元素是吧?(指针的定义是:值是某个东东的地址)
因此 ,我们看出,B的作用就相当于指针p作用..是吧?只是p的值可以变,B不可以,所以B是常指针。是一级的,指向一个int元素(第一个元素)。
2)同理,我们看 int B[3][4]={0}...这个是一个3*4的二维数组,B[0],B[1],B[2]都是一个一维数组是吧?可以想像成这个样子:
int (B[0])[4];
int (B[1])[4];
int (B[2])[4]; 这时,对比一下第一题,(B[0])或者B[1] 或者B[2] 代替了原来的B,而原来的B是一个指向大小为四的一维数组的第一个元素,所以这里的B[0],就是一个指向大小为四的一维数组的第一个元素,(其实不单只是0,B[1],B[2]也是的,只是[0],[1],[2]代表这个二维数组的第几行一维数组)。。所以B是一个2级常指针,同样指向二维数组的第一个元素B[0],而B[0]是一个一维数组。
总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。
3)所以,int A[2][3][4]={0};
A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。
所以, A是一个三级指针,指向了这个数组的第一个元素A[0],而A[0]是一3*4的二维数组。
而A[0]是一个二维数组,也相当于一个二维数组名,它有A[0][0],A[0][1],A[0][2]三个元素,A[0]作为一个数组是指向它的第一个元素A[0][0]..而A[0][0]是一个大小为4的一维数组。。所以说,A[0][0]指向一个大小为4的一维数组结构。
为什么A,A[0],A[0][0]的值同为 &A[0][0][0]? 看看第1)点,这句话:“想象一把尺上面,0-4cm是这四个元素所在的空间,所以首地址为0(cm的位置),“也是第一个元素的地址”。 这把尺的首地址,当然是这把尺第一格1cm(0~1cm)空间的首地址,因为都是0刻度那里,。同理,一层层下去,无论多少维,都是最底层的那个元素的地址。你的头顶的位置是你整个人的顶部,当然也是你上身的顶部,也是你的头的顶部....
好累。。
温馨提示:答案为网友推荐,仅供参考