力扣如何使用C语言返回数组 您所在的位置:网站首页 扣过来的扣怎么写 力扣如何使用C语言返回数组

力扣如何使用C语言返回数组

2024-05-29 14:35| 来源: 网络整理| 查看: 265

问题分析

力扣的题目特点是不需要自己完成输入输出,只需要编写实现算法的函数即可。在刚开始使用C语言在LeetCode刷题碰到的一个问题就是,当题目要求返回一个数组(一维或二维)时,我们写的代码常常发生如下所示的内存错误。 在这里插入图片描述 在LeetCode上使用C语言返回一个数组时,根据返回的数组是一维数组还是二维数组,题目分别会有如下说明:

当题目要求返回一个一维数组时: /** * Note: The returned array must be malloced, assume caller calls free(). */ int* func(int* returnSize) { // do something }

这里要求,返回的数组必须通过动态开辟(malloc,calloc,realloc),并且函数func中都含有一个一级指针参数returnSize,这个参数指向一个值为返回数组大小的整形变量,也就是说,*returnSize就是返回数组中含有元素的个数。

当题目要求返回一个二维数组时: /** * 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** func(int* returnSize, int** returnColumnSizes) { // do something }

这里要求,返回的数组必须通过动态开辟(malloc,calloc,realloc),并且函数func中懂包含两个参数,分别是一级指针returnSize和二级指针returnColumnSizes,其中,returnSize指向一个值为返回二维数组行数的整形变量,也就是说,*returnSize就是返回二维数组的行数,而returnColumnSizes指向一个存储了返回二维数组各行长度的一维数组,也就是说,(*returnColumnSizes)[i]就是返回二维数组第i行的元素个数。

解决方案

那么,为什么LeetCode使用C语言返回数组时需要这样设计呢?LeetCode的输出功能不需要我们完成,但是很好想象,如果我们需要输出得到的数组,那么对于一个一维数组,我们需要知道它的大小,对于一个二维数组,我们需要知道它的行数和各行需要输出的元素个数,如下所示:

当题目要求返回一个一维数组时: int* func(int* returnSize) { int* ans = (int*)malloc(sizeof(int) * 10); *returnSize = 10; return ans; } int main() { int size = 0; int* arr = func(&size); for(int i = 0; i int size = 0; int* ColSizes = NULL; int** ans = func(&size, &ColSizes); for(int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有