关于多维数组的运算问题

《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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值