Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C语言自定义函数如何返回数组(下)?

C语言自定义函数如何返回数组(下)?

作者头像
编程范 源代码公司
发布于 2018-04-18 08:16:00
发布于 2018-04-18 08:16:00
2.7K0
举报

通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。

此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种:

  1. 直接使用全局变量:这种方法最方便,但此方法打破了函数间的通信及封装的思想,所以不推荐使用,不在今天讨论范围之内。
  2. 通过堆区动态开辟内存解决:C语言中,我们通常用malloc来在堆区动态开辟内存,利用堆区“现用现开辟,用完手动收回”特点,实现灵活管理。是实际开发中的常用办法,也是我们今天的主要内容。
  3. 由调用方传入数组指针:此种方法不需要函数返回地址,而是在调用时直接 传入数组地址,委托被调用方进行操作,由于此局部变量属于调用方本身,故即便被调用方结束内存释放,也不会被影响到该数组。

下面逐个实验,对于第二种方法,由于动态开辟内存在堆区,堆区不想上一讲中局部变量在栈区存储,系统根据它的生命周期自动收回,而是手动开辟,手动释放,这样就可以完全规避问题,例子与效果见下图:

需要注意的是:记得用完free掉,防止内存泄露!

第三种方法:虽然没有在函数中返回数组,但也可以解决数组通信问题,主要思路就是调用方中定义数组,然后将地址传入,由于该内存属于调用方,而非被调用方,故被调用方在调用结束后释放掉内存也无所谓。例子程序及效果如下:

关于数组使用传递的总结,大体如上,大家有任何问题和疑问还可以联系我们!

C语言研究中心(www.dotcpp.com)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言自定义函数如何返回数组(上)?
最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢? 能否直接在自定义 函数中,写成char *类型返回值,直接返回呢?,代码如下: 直接返回str数组名(注意不需要加&,还有好多同学犯这个错
编程范 源代码公司
2018/04/18
3.4K0
C语言自定义函数如何返回数组(上)?
C语言进阶——动态内存管理
  C/C++中的内存区域大体可划分为这三个部分:栈区、堆区以及静态区,这三块区域比较重要。比如我们的 main 函数就是在栈上开辟的空间,当然我们使用的一般变量也都是存储在栈区上的,但是栈区空间有限,不能存储较大的数据,此时我们会通过动态内存管理来为这些“大数据”在堆上开辟空间供其使用,用完后记得释放内存就好了,除了储存“大数据”外,在堆区上开辟的空间还可以随意改变其大小(扩大或缩小都可以)。由此可见动态内存开辟的实用性,要想实现动态内存开辟也不难,只需要跟着本文一步一步学习就好了!
北 海
2023/07/01
5290
C语言进阶——动态内存管理
C语言——动态内存管理与内存操作函数
主要是系统用于自动分配给全局变量、static修饰的变量内存的。它们在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
星辰与你
2024/10/17
870
C语言——动态内存管理与内存操作函数
C语言进阶篇-01内存分配原理
 所以上面代码在打印结果的时候无法输出正确的地址,可能第一次会打印正确,那也只是系统优化了,第二次输出还是会表现错误
莫浅子
2023/10/17
3480
C语言进阶篇-01内存分配原理
C语言---动态内存管理
• 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整,但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道,那数组的编译时开辟空间的⽅式就不能满⾜了。
凯子坚持C
2024/09/23
880
C语言---动态内存管理
【C进阶】——C/C++程序的内存开辟 及 柔性数组详解
在之前的文章里其实我们简单的介绍过C语言中的内存划分。 大致可以分为:栈区,堆区和静态区:
YIN_尹
2024/01/23
2340
【C进阶】——C/C++程序的内存开辟 及 柔性数组详解
【C语言必学知识点七】坚决不允许你还不知道C/C++程序如何对内存进行分区!!!
在前面的内容中,我们已经介绍完了4个动态函数及其使用。不知道大家在前面的内容中有没有过一种疑惑——为什么同样是申请空间,通过动态函数申请的空间可以进行大小的修改,而创建变量或数组时申请的空间确无法进行空间大小的修改?
蒙奇D索隆
2024/12/21
960
【C语言必学知识点七】坚决不允许你还不知道C/C++程序如何对内存进行分区!!!
【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc
前言:在C语言的世界里,动态内存管理是一项既强大又复杂的特性,它赋予了程序员在程序运行时动态地分配和释放内存资源的能力。这一特性是C语言灵活性和高效性的重要基石,同时也是初学者踏入C语言高级编程领域时必须跨越的一道门槛
Eternity._
2024/09/13
2960
【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc
【C语言】动态内存管理(heap)
4.补充:C语言是可以创建变长数组的(也就是柔性数组),c99增加了这种语法标准,但现在还是有许多的编译器不支持这种标准
举杯邀明月
2023/04/12
7350
【C语言】动态内存管理(heap)
【C语言】动态内存管理及相关笔试题
   我们之前已经学过一些开辟内存的方法,就是创建变量时,操作系统给我们分配的空间,而内存大致分为以下3个大部分,如图:
TANGLONG
2024/10/15
930
【C语言】动态内存管理及相关笔试题
C语言从入门到实战——动态内存管理
在C语言中,动态内存管理是指程序运行时,通过调用特定的函数动态地分配和释放内存空间。动态内存管理允许程序在运行时根据实际需要来分配内存,避免了静态内存分配在编译时就确定固定大小的限制。
鲜于言悠
2024/03/20
3070
C语言从入门到实战——动态内存管理
c语言进阶部分详解(详细解析动态内存管理)
上篇文章介绍了枚举,联合相关的内容,大家可以点击链接进行浏览:c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))-CSDN博客
是Nero哦
2024/01/18
1220
c语言进阶部分详解(详细解析动态内存管理)
【C语言】内存的动态分配与释放
这样的特点就导致了,我们无法在程序运行中的任意时刻分配存储空间,也不能把不需要的存储空间释放或丢弃.为了能够满足上述需求,我们就需要使用内存的动态分配.
修修修也
2024/04/01
1880
【C语言】内存的动态分配与释放
C语言进阶(十二) - 动态内存管理
void* malloc(size_t size); 头文件<stdlib.h>
怠惰的未禾
2023/04/27
5620
C语言进阶(十二) - 动态内存管理
【C语言指南】C语言内存管理 深度解析
在C语言中,内存分配主要有两种方式:静态分配和动态分配。下面详细介绍这两种方式及其代码示例。
倔强的石头
2024/12/06
2170
【C语言指南】C语言内存管理 深度解析
C语言:动态内存管理
但是有些时候我们对于空间的需求并不仅仅满足于此,可能我们需要的空间大小是在函数运行时才能够知道,那么数组编译时开辟的空间无法满足我们的需求。可能我们希望空间可以不那么快就被释放,那么在栈区上开辟空间也无法满足我们的要求。
小陈在拼命
2024/02/17
1520
C语言:动态内存管理
c语言动态内存管理
动态内存分配为我们提供了很大的便利,如果我们想要一块自定的内村大小,可以通过动态内存管理来实现,从而提升了代码的灵活性,之前我们学习的空间开辟一共两种,
用户11367247
2024/11/20
450
c语言动态内存管理
内存之谜:C语言动态内存管理
动态内存分配允许程序根据实际需要来分配内存。这意味着程序可以根据不同的输入和条件来处理不同大小的数据结构,如数组. 下面列举一般的开辟空间的方式:
用户11029103
2024/03/19
1170
内存之谜:C语言动态内存管理
C语言重点突破(五) 动态内存管理
动态内存管理是指在一个程序运行期间动态地分配、释放和管理内存空间的过程。在应用程序中,当程序需要使用变量或对象时,需要在内存中分配一段空间,并在使用完毕后释放该空间,以提高程序的效率和性能。本文意在介绍常用动态内存函数以及如何使用它们来进行动态内存分配。
对编程一片赤诚的小吴
2024/01/23
1840
C语言重点突破(五) 动态内存管理
C语言动态内存分配函数malloc(),calloc(),realloc()用法对比分析
特点: 所开辟的内存是在栈中开辟的固定大小的 ,如a是4字节 ,数组b是40字节 ,并且数组在申明时必须指定其长度 , 如果是全局数组的话,内存是在编译时分配好的,如果是局部变量数组的话,运行时在栈上静态分配内存。
CtrlX
2022/10/04
1.4K0
C语言动态内存分配函数malloc(),calloc(),realloc()用法对比分析
推荐阅读
相关推荐
C语言自定义函数如何返回数组(上)?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文