我想在C中制作一个二维数组。
例如,我创建一个名为place的int类型变量,如下所示:
int *place;
我有一个游戏,其中包含行和列等变量。 我希望我的place变量是一个二维数组,动态分配它的行和列(对于数组的最大大小),这在" normal"中看起来像这样。声明:
place[rows][columns];
但我不知道如何使用动态分配。
对于一维数组我会这样做:
place = (int*) malloc (levels * sizeof(int));
但我不知道如何使用2D数组执行此操作。
修改
我如何为char而不是int重写这个?
我试图用chars覆盖整数,但它不起作用。
答案 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 ;