关于多维数组的运算问题

《c和指针》中有一道关于多维数组的题目,引用如下:

int     array[4][2][3][6];

请问  array ,  &array+1,array+2, array[2]-1, array[0][1][0]+2 的值和类型。

在回答之前首先这个问题请思考一下,指针和数组在存取时的方式差异;

int arr[10];
int *p=arr;
在大多数情况下,arr[3] , *(arr+3) , p[3] , *(p+3) 是没有差别的,都可以存取arr中的第4个元素。然而,对编译器来说,这完全不同的执行代码。

数组和指针的标准书写方式:

arr[3]   是从 array的位置开始,移动 3个 元素的大小;

*(p+3)是读出 p的值,加上 3*sizeof(元素),取出对应内存字符。

注意到此处 “+3”的实际大小与元素的大小相关,即就是对应不同的权重:

array 和 &array

虽然两个的值相同,但是array代表数组的地址,&array 就是取整个数组的首地址,

不同的地方在于,数组名+1和数组名取地址+1,前者是第二个元素的地址,后者是数组越界后第一个元素地址。


此题的答案

array  指数组首元素的地址,即第一个三维数组的大小,类型为(*a)[2][3][6];

&array+1  对整个数组取地址加一个 array数组大小;
array+2  数组中第三个三维数组的地址,类型为(*a)[2][3][6];
array[2]-1 数组中第二个三维数组中最后一个二维数组的地址,类型为(*b)[3][6];
array[0][1][0] 数组中第一个三维数组中第二个二维数组中第一个一维数组,类型为(*c)[6];

因此,在进行多维数组运算时,首先将多维数组看成低一维数组,“+”“-”低一维数组的大小。


参考文献:对多维数组的理解  http://blog.csdn.net/zhengqijun_/article/details/52015950

指针与数组的区别 http://blog.163.com/yang_ping111/blog/static/71885052200841825710944
发布了26 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Teemo_king/article/details/78039159