C语言求解「按条件转二维数组」函数参数与返回值疑问
关于C语言
findMatrix函数返回要求及参数解析 问题背景
我在C语言中解决「将数组转换为满足条件的二维数组」问题时,搞不懂函数的返回要求,以及指针returnSize、二级指针returnColumnSizes这两个参数的用途。
原题要求
给定整数数组nums,需创建满足以下条件的二维数组:
- 仅包含nums的所有元素;
- 每一行的整数均不重复;
- 行数尽可能少;
- 返回结果数组,多解时返回任意一个即可。
注:二维数组每行元素数量可不同。
示例
输入:nums = [1,3,4,1,2,3,1]
输出:[[1,3,4,2],[1,3],[1]]
解释:该二维数组各行元素无重复,使用了所有nums元素,且无法用少于3行实现。
函数模板
/* * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). */ int** findMatrix(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ }
核心问题解析
函数返回要求
你需要返回一个int**类型的指针,也就是动态分配的二维数组的首地址——这个二维数组就是构造出的符合条件的结果。注意:
- 这个二维数组必须用
malloc(或相关内存分配函数)动态开辟内存,因为调用方会负责后续的内存释放操作。 - 二维数组的每一行也需要单独用
malloc分配内存,存储对应行的元素。
参数returnSize的用途
这是一个输出型参数,用来传递返回的二维数组的行数给调用方。
- 你需要在函数内部计算出结果的行数(比如示例中的3行),然后把这个数值赋值给
*returnSize。 - 调用方通过读取
returnSize指向的变量,就能知道返回的二维数组有多少行。
参数returnColumnSizes的用途
这同样是一个输出型参数,用来传递返回的二维数组中每一行的元素个数给调用方。
- 首先你需要动态分配一个大小为
*returnSize的int数组(用malloc),这个数组的每个元素对应二维数组中某一行的长度。比如示例中,这个数组就是[4,2,1]。 - 然后把这个数组的地址赋值给
*returnColumnSizes,这样调用方就能通过这个指针获取到每一行的元素数量。 - 注意这个数组也必须是动态分配的,因为调用方会负责释放它。
为什么需要这两个参数?
C语言没有内置的动态数组结构,当你返回一个二维数组时,调用方无法直接得知数组的行数,也无法得知每一行的元素个数。这两个输出参数就是用来把这些必要的元数据传递给调用方,让调用方能够正确遍历和使用返回的二维数组。
内容的提问来源于stack exchange,提问作者Harshit Singh
相关产品推荐
相关产品推荐

