如何动态分配二维数组

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

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

int *place; 

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

 place[rows][columns]; 

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

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

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

但我不知道如何用2D数组做到这一点。

编辑:

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

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

place成为指向数组的指针,

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

这为您提供了一个可以简单访问的连续内存块(适用于本地)

 place[i][j] = whatever; 

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

分配记忆:

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

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

 place[ i*columns + j] = value ; 

您需要执行以下操作以动态分配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)); 

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