把一維陣列轉化成大小不超過一維陣列大小的我想要的形狀的 N 維陣列。
這裡以將一個長度為 20 的一維 int 陣列轉化成 5 行 4 列的二維 int 陣列為例:
以上程式碼輸出結果為:
這裡相當於把一個長度為 20 的一維陣列轉換成 5 行 4 列的二維陣列來使用。
在 C 語言裡面,指標其實有兩個含義:
parray 存放的是一個 int 陣列的地址,這個陣列在記憶體中佔用的空間為 4 * sizeof(int)。
所以,(parray+1) 的意思是將指向的地址偏移 4 * sizeof(int) 後的記憶體地址,而這個記憶體地址剛好就是陣列 array 的第 5 個元素的記憶體地址。
因此,我們就可以透過 parray 以對待二維陣列的方式操作一個一維陣列 array 了。
parray2 道理大體上相同。
這裡解釋一下每一個步驟。
把一維陣列轉化成大小不超過一維陣列大小的我想要的形狀的 N 維陣列。
這裡以將一個長度為 20 的一維 int 陣列轉化成 5 行 4 列的二維 int 陣列為例:
以上程式碼輸出結果為:
200 200這裡相當於把一個長度為 20 的一維陣列轉換成 5 行 4 列的二維陣列來使用。
在 C 語言裡面,指標其實有兩個含義:
指向目標的記憶體地址。目標在記憶體中的大小。parray 存放的是一個 int 陣列的地址,這個陣列在記憶體中佔用的空間為 4 * sizeof(int)。
所以,(parray+1) 的意思是將指向的地址偏移 4 * sizeof(int) 後的記憶體地址,而這個記憶體地址剛好就是陣列 array 的第 5 個元素的記憶體地址。
因此,我們就可以透過 parray 以對待二維陣列的方式操作一個一維陣列 array 了。
parray2 道理大體上相同。
這裡解釋一下每一個步驟。
int array[20] 定義了一個在 Stack 上的陣列。(*parray)[4] 定義了一個指向長度為 4 的陣列的指標。parray = (int(*)[4]) &array[0] 取出 array 的地址(現在地址的型別是 int(*)[20])轉換成 int(*)[4] 賦給 parray。(*parray2)[5][4] 定義了一個指向 5 行 4 列二維陣列的指標。parray2 = (int (*)[5][4]) &array 取出 array 的地址(現在地址的型別是 int(*)[20])轉換成 int(*)[5][4] 賦給 parray2。array[4] = 200 將 array 的第 5 個元素的值設為 200。(*(parray+1))[0] 首先將指標偏移 4 個 int 的長度,取出指標指向的陣列,取出陣列的第一個值 200。(*parray2)[1][0]) 首先取出指標指向的陣列,取出陣列第 2 行第 1 列的值 200。