C语言中没有专用来申请二维数组的库函数,只能手动申请内存来构建二维数组,通常的方法如下:
(1)先申请二维数组中的所有一维数组指针之和大小的内存;
(2)循环申请一维数组大小的内存。
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
/* 申请二维数组,其实这里只申请了大小为二维数组中所有一维数组的指针的总和的内存,
numSize代表了二维数组中所有一维数组的个数,也即二维数组的行数 */
int **ans = (int **)malloc(sizeof(int*)*numsSize);
for (int i = 0; i < total; i++) {
ans[i] = (int*)malloc(sizeof(int) * 3); //这里申请二维数组中的一维数组,此处假设一维数组大小为3
ans[i][0] = nums[i]; //为二维数组赋值
ans[i][1] = nums[left];
ans[i][2] = nums[right];
}
return ans;
}
以上是在一个函数中申请二维数组,然后将其传出。假如要给一个函数传递二维数组,则需要把二维数组的指针,以及其行、列的大小都传递给对方。如下
int threeSum(int** nums, int inputSize, int* inputColSize);
int main()
{
int **ans = (int **)malloc(sizeof(int*)*numsSize);
int inputSize = 3;
int total = 2;
/* 以如下二行三列的数组为例 */
for (int i = 0; i < total; i++) {
ans[i] = (int*)malloc(sizeof(int) * inputSize);
}
/* 这时需要申请一个数组来传递行和列的大小 */
int *inputColSize = (int *)malloc(sizeof(int) * inputSize);
inputColSize[0] = 2;
inputColSize[1] = 3;
threeSum(ans, inputSize, inputColSize);
}