如何动态分配二维数组
我想在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));
我们的想法是首先创建一个指针的一维数组,然后,为每个数组条目创建另一个一维数组。