函数的英文是function,有功能的意思,函数的作用在于合理分配功能,增强程序的可读性。合理分解功能,降低程序的复杂性。隐藏函数内部的数据和实现,尽可能将问题局限于函数本身。

函数可以理解为一种功能抽象,一些语句的封装或聚合。由函数的各部分形成一个数据描述、输入、处理、输出的结构。

函数调用时都会在栈上开辟自己的内存空间(栈帧),用于存放返回地址、实参值、函数体内的局部变量。

实参和形参的结合相当于用实际参数值初始化形式参数 ,可以理解为:形参=实参(实际值或地址值),存储到栈帧。

函数的参数和返回值可以是值、指针和引用,它们有不同的作用。

函数是程序重要的模块,在函数内和函数外定义的变量(数据)分别存储于不同的内存空间,对应于不同的作用域和存续期。

模块(函数)之间的交互在于传参与函数返回,传值、传址、值返回、址返回区别如下:

传址或址返回可以是指针或引用,只是后者的写法更简洁(引用不能为空指针);

传址时在函数体内可以修改指针本身或指针指向的值,但前者会与主调函数无关。

如果用址传递想修改一个一级指针,则形参必须是一个二级指针或指针引用。

当然,也可以使用指针返回(而不是参数返回),这样更简洁

如果被调函数的形参是指针引用,有申请堆空间,则主调函数需要释放堆内存;

数组传递默认为传址,其它类型,包括复合类型默认为传值。

通常,从健壮性考虑,需要对函数的输入、输出做一些边界或合法性检查。

从可读性考虑,通常也要对函数的功能、输入、输出做一些注释性说明。

在C++中,函数可以重载,参数可以使用默认值,可以定义为inline;

应当说,值传递在被调函数和主调函数之间的耦合度更低,相互更独立,而值传递的效率更高。

-End-

java函数返回多个值_深入理解被调函数与主调函数之间的传值、传址、值返回、址返回...相关推荐

  1. 怎么确定迭代器后面还有至少两个值_如何理解Python中的可迭代对象、迭代器和生成器

    ▍前言 在讨论可迭代对象.迭代器和生成器之前,先说明一下迭代器模式(iterator pattern),维基百科这么解释: 迭代器是一种最简单也最常见的设计模式.它可以让用户透过特定的接口巡访容器中的 ...

  2. memcpy函数_如何理解c语言中的回调函数

    在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 这段话不是那么好理解,不同语言实现回调的方式有些许不 ...

  3. 读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

    摘要:一文带你用小熊派开发板动手做土壤湿度传感器. 一.实验准备 1.实验环境 一块stm32开发板(推荐使用小熊派),以及数据线 已经安装STM32CubeMX 已经安装KeilMDK,并导入stm ...

  4. mysql返回第n个值_【单选题】以下MySQL聚合函数,返回n个数值平均值的是( )。 A. MAX B. SUM C...

    突水征兆中辨别"挂汗"现象真伪的方法是剥去煤岩层表面,观察新面是否存在潮气,若煤岩潮湿则是透 石灰岩容易被水溶解形成溶洞.() 探放水设计中应首先标出积水线.探水线和警戒线三条线. ...

  5. java实体类中有枚举类型_当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?...

    当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...

  6. java怎么获取数组下标是偶数_如何获取数组下标为偶数的下标所对应的数组内的值...

    你的问题 如何获取数组下标为偶数的下标所对应的数组内的值 换句话说就是: 获取数组内偶数下标对应的 数组 照上面的句子来看,合理猜测你说的其实是 从二维数组里取得偶下标对应的数组们,并把他们铺平为一个 ...

  7. mysql 事务 返回插入的值_深入理解mysql事务:事务机制的实现原理

    作者:logan 出自:SegmentFault 思否 一.事物的四个特性(ACID) 原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行.只要其中一个指令执行失败,所有的 ...

  8. java函数是什么意思啊_[求助]请问setHorizontalAlignment是什么意思!什么函数来

    [求助]请问setHorizontalAlignment是什么意思!什么函数来 tf=new JTextField(); tf.setEditable(false);tf.setHorizontalA ...

  9. lisp修改天正标高值_表达式计算修改版本,增加计算函数选择按钮[2019年1月23日更新]...

    本帖最后由 wayne_myles 于 2019-1-22 11:30 编辑 这个计算器不错 我输入9999*9999直接提示表达式不正确 6666 http://bbs.mjtd.com/threa ...

最新文章

  1. 解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题
  2. [LeetCode] 1091. Shortest Path in Binary Matrix
  3. 常见测量矩阵的MATLAB实现
  4. Reference和ReferenceQueue
  5. Asp.net 视频摘要
  6. 两条边延长角会有什么变化_叶片锁是什么样的 叶片锁使用方法【详解】
  7. 八、IO优化(6)优化tempdb性能
  8. Java基础---方法的重载(overload)+ 优先向上匹配原则
  9. IBatisNet的配置(SqlMap.config)
  10. 黑客是否可以攻击被拔掉网线的电脑?
  11. python可以做什么工作-Python可以做什么工作?Python有哪些方向?
  12. Elasticsearch的索引模块(正排索引、倒排索引、索引分析模块Analyzer、索引和搜索、停用词、中文分词器)...
  13. 连接服务器显示句柄无效,win10打印机句柄无效怎么解决?_网站服务器运行维护,win10,打印机,句柄无效...
  14. 关于我对游戏开发的理解
  15. 创建第一个air程序转自 IT168 静水流深
  16. 【windows7桌面图标蓝底】4步帮你去掉
  17. 操作系统重要知识清单:一起来搞懂进程呀!!
  18. 考研英语阅读12种解题技巧!码住!
  19. 隐藏Ubuntu 18.04 顶部通知栏( hide top bar)
  20. 字节跳动 Go RPC 框架 KiteX 性能优化实践

热门文章

  1. 【Python】万花筒
  2. 【Python】我的第一个EXE程序
  3. rundll32的使用和使用c#调用dll
  4. windows批处理脚本bat
  5. js/d3.min.js_在5分钟内学习D3.js
  6. tmux 上滚_实践中的tmux:回滚缓冲区
  7. react api_如何在WordPress REST API之上构建React应用
  8. 深度学习去燥学习编码_请学习编码
  9. html标记ruby,html5 ruby标签的定义及使用方法详解(内有实例介绍)
  10. pymongo操作方法