繁体   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