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;
int (*arr4)[8] = malloc(sizeof *arr4 * 7);
arr4[0][0] = this;
// or
int (*arr5)[num] = malloc(sizeof *arr5 * num);
arr5[0][0] = that;
4
虽然我认为"2D-array of integers"的含义明确地类似于 int arr[10][10] ,但在网上搜索却带来了"using an array of pointers"或"using a pointer to a pointer"等解释(例如,参见this post) . 此答案的其余部分基于 int arr[r][c] 形式的2D数组,其中 r 表示行数, c 表示每行的列数 .
如果不支持可变长度数组,则至少 c 必须是const表达式(即在编译时已知) . 相反, r 也可以在运行时定义,使得至少行数是"dynamic" . 然后可以将2D数组表示为一个D数组的(可能是不完整的)数组:
3 回答
让我们从什么是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 . 有时这通常是一个人想要的"allocate 2D"数组,实际上是指向一维数组的指针
虽然我认为"2D-array of integers"的含义明确地类似于
int arr[10][10]
,但在网上搜索却带来了"using an array of pointers"或"using a pointer to a pointer"等解释(例如,参见this post) . 此答案的其余部分基于int arr[r][c]
形式的2D数组,其中r
表示行数,c
表示每行的列数 .如果不支持可变长度数组,则至少
c
必须是const表达式(即在编译时已知) . 相反,r
也可以在运行时定义,使得至少行数是"dynamic" . 然后可以将2D数组表示为一个D数组的(可能是不完整的)数组:您可以使用以下两种方式之一分配2D阵列 .
1:指向数组的指针数组
这将是:
array
现在将指向每个表示一行的指针列表,这些指针将指向行中的元素 . 在这种情况下,您可以使用array[n][m]
访问第n行和第m列2:单个连续块
这可能是您想要的方法,您可以在一次分配中完成所有操作 . 这将要求您以二维表示形式存储二维数组 .
然后,您可以使用偏移量存储和检索第n行和第m列:
array[(n * cols) + m]