![](/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.