如何动态分配二维数组

时间:2012-12-01 11:36:24

标签: c multidimensional-array

我想在C中制作一个二维数组。

例如,我创建一个名为place的int类型变量,如下所示:

int *place;

我有一个游戏,其中包含行和列等变量。 我希望我的place变量是一个二维数组,动态分配它的行和列(对于数组的最大大小),这在" normal"中看起来像这样。声明:

place[rows][columns];

但我不知道如何使用动态分配。

对于一维数组我会这样做:

place = (int*) malloc (levels * sizeof(int));

但我不知道如何使用2D数组执行此操作。

修改

我如何为char而不是int重写这个?

我试图用chars覆盖整数,但它不起作用。

3 个答案:

答案 0 :(得分:10)

place成为数组的指针,

int (*place)[columns] = malloc(rows * sizeof *place);

它为您提供了一个连续的内存块(适用于本地),您可以使用

进行访问
place[i][j] = whatever;

答案 1 :(得分:0)

您需要执行以下操作以动态分配int类型的arr [x] [y]:

 int i = 0;
 int **arr = (int**)calloc(x, sizeof(int*));
 for(i = 0; i < x; i++)
      arr[i] = (int *) calloc(y, sizeof(int));

这个想法是首先创建一个指针的一维数组,然后,为每个数组条目创建另一个一维数组。

答案 2 :(得分:0)

您可以通过一些智能索引将单个1d数组用作2d数组:

分配记忆:

place = (int*) malloc(rows * columns * sizeof(int));

要访问place[i][j],请使用i和j作为:

place[ i*columns + j] = value ;