欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于多维数组的运算问题

程序员文章站 2024-03-15 20:12:24
...

《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关于多维数组的运算问题关于多维数组的运算问题关于多维数组的运算问题关于多维数组的运算问题