对于力扣C语言函数int** returnColumnSizes参数的理解

281 阅读1分钟

一般出现该参数时,都是因为函数返回了动态分配内存的二维数组,因为主函数无法得知二维数组的数组行与列的长度,所以需要进行参数传递。这里使用了指针的方法进行传参。行通过int* returnSize传递;列就通过 int** returnColumnSize进行传递。

在函数传参中,如若要修改到主函数的变量取值,则需传入其指针,然后在函数中取内容后进行操作,如下例:

void func(int* returnSize){
    *returnSize = 10;
}

void main(void){
    int returnSize;
    func(&returnSize);
}

而力扣函数中int** returnColumnSizes参数的传入同理,就是要对一个int*数组进行修改。因为二维数组每一行的列数可能会不同,所以需要使用一维数组,每一个元素存入每行对应的列数,以此标识。

对于数组一般在函数内进行内存分配,此时一般会提示:

Both returned array and *columnSizes array must be malloced, assume caller calls free().

所以同样取内容*returnColumnSizes,开辟一维数组空间(int )malloc(xxxsizeof(int))并对其进行赋值即可。(xxx需取足够大的值,保证至少为返回的二维数组的行数),操作示例如下:

void func(int** returnColumnSizes){
//开辟空间
*returnColumnSizes = (int *)malloc(xxx*sizeof(int));
//xxx需要足够大,至少等于行数
//赋值操作(设第0行的列数为4)
(*returnColumnSizes)[0] = 4;
}

int main(void){
    int* returnColumnSizes;
    func(&returnColumnSizes);
}

由上述代码可见,只要掌握修改主函数变量,需传入指针,在函数中取内容进行修改这一核心思想,就能很好理解这一参数的使用了。