(C语言)解析力扣中函数参数int **returnColumnSizes
本文将以力扣(59.螺旋数组)为例,解析力扣返回二维数组的函数的参数int **returnColumnSizes应该如何赋值、如何在函数中创建并返回二维数组以及如何调用返回二维数组的函数,最后给出了完整程序和运行结果。
generateMatrix函数参数解释
generateMatrix函数的函数头(图1)

generateMatrix函数的返回参数是一个二级指针,指向返回的二维数组,generateMatrix函数的第一个参数是整型参数n,表示二维数组的行和列。第二个参数是整型指针returnSize,表示返回的二维数组的行数。第三个参数是二级整型指针returnColumnSizes,表示返回的二维数组每一行的列数。
所以returnColumnSizes应该指向一个一维数组的地址的地址,在主函数中不知道返回的二维数组每一行有多少列,于是用一个一维数组存储返回的二位数组每一行的列数,这个一维数组需要在函数中动态分配内存,其大小就是返回二维数组的行数(图2)。
*returnColumnSizes与returnColumnSizes[0]等价。

到这里只是完成了让returnColumnSizes指向一个一维数组的首地址,想要让这个一维数组中存储返回的二维数组每一行有多少列,还需要对这个一位数组赋初值。
二维数组动态分配内存与returnColumnSizes赋值
可以在动态分配二维数组内存的同时初始化returnColumnSizes指向的一维数组。给二维数组动态分配内存时,
先给每一行的首地址分配空间int** result = (int**)malloc(sizeof(int)*n);
再在分配每一行的空间时将这些地址指向每一行的首地址*(result+i) = (int*)malloc(n * sizeof(int));同时给一维数组赋初值*((*returnColumnSizes)+i)=n。
*(result+i)与result[i]等价
*((*returnColumnSizes)+i)与(*returnColumnSizes)[i]等价

这里*returnSize=n表示返回的二维数组的行数为n行,result就是内存动态分配的二维数组。
generateMatrix函数调用方法
从前面的解析已经了解了这个函数的参数,以及如何在函数中给这些参数赋值,接下来将介绍如何在其他函数中调用这个函数。
如(图4)函数generateMatrix第一个参数是整型,定义整型变量m,直接传入,第二个参数rem是返回二维数组的行数,当然也是整型变量,但是需要在函数中修改变量rem的值,所以传入的是rem的地址,第三个变量n存储返回二维数组每一行的列数,是一个指针,传入的就是n的地址。函数返回二维数组的地址res。
最后使用两层for循环输出后释放动态分配的内存

最后给出完整程序
运行结果
