![](/img/trans.png)
[英]How to declare and use a 2-D int array of size [16][256] in C considering the limited RAM space.?
[英]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.