關於多維數組的運算問題

《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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章