簡體   English   中英

如何使用類型:int(*)[] 在 c 中動態聲明二維數組?

[英]how to dynamically declare a 2-d array in c using type: int(*)[ ]?

我嘗試使用 int**(指向指針的指針)和 int*[](指針數組),但我無法使用指向數組的指針執行任務。我們如何使用指向數組的指針malloc function 來創建c 中的二維數組。

請提供示例代碼:)

void *allocateMemory2DArray(size_t x, size_t y)
{
    int (*array)[x][y];

    array = malloc(sizeof(*array));
    return array;
}

5d 陣列

void *allocateMemory5DArray(size_t x, size_t y, size_t v, size_t q, size_t r)
{
    int (*array)[x][y][z][q][r];

    array = malloc(sizeof(*array));
    return array;
}

所以讓我們從頭開始。

動態分配T的 N 元素數組(對於某些任意T )的典型方法是

T *p = malloc( sizeof *p * N ); // sizeof *p == sizeof (T)

這為T類型的 N 個對象分配了足夠的空間,其中p指向第一個元素

   T *        T
   +–––+      +–––+
p: |   |–––––>|   | p[0]
   +–––+      +–––+
              |   | p[1]
              +–––+
               ...
              +–––+
              |   | p[N-1]
              +–––+

現在,將T替換為數組類型 - R [M]

R (*p)[M] = malloc( sizeof *p * N );

這為 N 個類型為R [M]的對象分配了足夠的空間 - IOW 你已經分配了一個 NxM 數組R p仍然指向第一個元素,只是在這種情況下,第一個元素本身就是一個數組。

   R (*)[M]    R [M]    
   +–––+       +–––+
p: |   |––––––>|   | p[0][0]
   +–––+       + - +
               |   | p[0][1]
               + - +
                ...
               + – + 
               |   | p[0][M-1]
               +––—+
               |   | p[1][0]
               + – +
               |   | p[1][1]
               + - +
                ...
               + – +
               |   | p[1][M-1]
               +–––+
                ...
               + – +
               |   | p[N-1][M-1]
               +–––+

您可以像任何常規二維數組一樣p進行索引。

您可以將其擴展到更高維度的 arrays - 將R替換為另一種數組類型,例如Q [L]

Q (*p)[M][L] = malloc( sizeof *p * N );

這會為 NxMxL 數組分配空間,並且您可以像任何 3d 數組p[i][j][k]一樣對它進行索引。

在每種情況下,語義都是完全相同的——您正在為 N 個對象分配空間,只是對象的類型不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM