4

我想在 C 中创建一个二维数组。

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

int *place;

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

place[rows][columns];

但我不知道如何使用动态分配来做到这一点。

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

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

但我不知道如何使用二维数组来做到这一点。

编辑:

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

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

4

3 回答 3

10

place是一个指向数组的指针,

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

这为您提供了一个连续的内存块(有利于局部性),您可以简单地访问它

place[i][j] = whatever;
于 2012-12-01T11:38:57.290 回答
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));

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

于 2012-12-01T11:42:37.590 回答
0

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

分配内存:

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

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

place[ i*columns + j] = value ;
于 2012-12-01T11:44:50.853 回答