int (*arr2)[5][6] = malloc(sizeof *arr2);
if (arr2 == NULL) return EXIT_FAILURE;
(*arr2)[0][0] = this;
return EXIT_SUCCESS;
// or with Variable Length Arrays in C99 and optionally in C11
int (*arr3)[num][num] = malloc(sizeof *arr3);
(*arr3)[0][0] = that;
3条答案
按热度按时间jtjikinw1#
如何在1中动态分配array2D分配C
让我们从什么是2D数组开始:
2D array or "array 3 of array 4 of int"示例
字符串
OP的代码声明了一个pointer to pointer to int,而不是一个2D数组,也不是指向2D数组的指针。
顺便说一句,演员不需要。
型
代码可以为2D数组分配内存并返回指向该内存的指针。pointer to array 5 of array 6 of int
型
或者,代码可以为1D数组分配内存并返回指向该内存的指针。pointer to array 8 of int。有时,这通常是人们想要的“分配2D”数组,实际上是指向1D数组的指针
型
egdjgwm82#
您可以通过以下两种方式之一分配2D数组。
1:数组指针数组
这将是:
字符串
array
现在将指向一个指针列表,每个指针代表一行,这些指针将指向该行中的元素。2:单个连续块
这可能是你想要的方法,你可以在一次分配中完成所有的操作。这需要你将2D数组存储在1D表示中。
型
然后,可以存储和检索第n行和第m列,偏移量为:
array[(n * cols) + m]
5us2dqdw3#
虽然我认为“2D整数数组”的含义是明确的,比如
int arr[10][10]
,但在网上搜索时会出现“使用指针数组”或“使用指向指针的指针”之类的解释。(参见,例如,this post)。这个答案的其余部分基于int arr[r][c]
形式的2D数组,其中r
表示行数,c
表示每行的列数。如果不支持可变长度数组,那么至少
c
必须是一个常量表达式(即在编译时已知)。相反,r
也可以在运行时定义,这样至少行数是“动态的”。2D数组可以表示为一维数组的数组(可能不完整):字符串