回覆列表
  • 1 # 使用者6358054298058

    把一維陣列轉化成大小不超過一維陣列大小的我想要的形狀的 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。

  • 中秋節和大豐收的關聯?
  • 活蟹的儲存方法?