You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的用途

这同样是一个输出型参数,用来传递返回的二维数组中每一行的元素个数给调用方。

  1. 首先你需要动态分配一个大小为*returnSize的int数组(用malloc),这个数组的每个元素对应二维数组中某一行的长度。比如示例中,这个数组就是[4,2,1]。
  2. 然后把这个数组的地址赋值给*returnColumnSizes,这样调用方就能通过这个指针获取到每一行的元素数量。
  3. 注意这个数组也必须是动态分配的,因为调用方会负责释放它。

为什么需要这两个参数?

C语言没有内置的动态数组结构,当你返回一个二维数组时,调用方无法直接得知数组的行数,也无法得知每一行的元素个数。这两个输出参数就是用来把这些必要的元数据传递给调用方,让调用方能够正确遍历和使用返回的二维数组。

内容的提问来源于stack exchange,提问作者Harshit Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 01:03:25