7.1——函数的定义,参数传递,return语句
函数的定义:
(1)函数体是一个作用域,函数体是一个语句块,定义了函数的具体操作
(2)函数的形参类似于局部变量,只是区别是它是在函数的形参列表中定义的。
(3)C++是一种静态强类型语言,对于每一次函数调用,编译时都会检查其实参的类型,必须是与形参相同或者可以转化
参数的传递:
(1)当参数为非引用时,调用时形参复制实参的值
(2)当参数为引用时,调用时形参是实参的别名。
非引用形参:
(3)当形参为const的非引用时,调用时可以传递const实参也可以是非const的实参,只是在函数中不能改变这个局部变量的值
其实为了与C相兼容,这个类型还是被认为是非const了
(4)复制实参的局限性:特别在复制对象时付出时间和空间代价太大。
引用行参:
(5)使用引用形参,函数可以直接访问对象而无需复制,然后使用const引用可以避免修改实参
(6)若是函数具有非const的引用形参,则不能用const的对象来调用(因为const对象时不能修改的),而函数是可以修改传递
进来的对象的。
(7)应该将不修改相应实参的形参定义为const引用,这样const对象也可以调用它了,不然会大大的限制函数的使用(因为非const
引用的形参的函数只能与非const的对象关联在一起)
(8)传递指向指针的引用:void func(int *&v1) 这里从右向左看,v1是一个引用,是一个指向int型对象的指针的引用。即这个
指针的一个别名。当在函数里面改变这个指针变量时,实参的指针变量也会改变。
vector形参:
(9)vector与数组有所不同,一般不应该使用vector的非引用形参,因为这样会复制vector的每一个元素。应该将其采用引用的类型
(10)一般更倾向于采用迭代器来传递指向容器中将要处理的元素。
数组形参:
(11)使用数组名时,数组名会自动转化为指向其第一个元素的指针。
(12)不能复制数组(即在函数调用的时候就算是以数组名作为参数时,会转化为指针)
(13)虽然不能直接传递数组,但是函数的形参可以写成数组的形式:void func(int*) void func(int[])
void func(int[10])其实这个指定的长度是没啥用的。这三种都是等价于int*指针形参的
数组形参的引用和非引用:
(14)当数组作为形参非引用时,会自动转化为指针,指向数组的第一个元素。形参复制的是这个指针的值,可以通过指针
来对数组元素进行操作。
(15)void func(int(&ary)[10])当将数组作为引用的形参时,编译器不会将数组实参转化为指针,而是传递的数组
引用的本身。这时编译器会检查实参数组长度与形参是否匹配。
多维数组:
(16)编译器会忽略第一维的长度 void func(ary【】【10】)。这里其实形参是一个指针,指向一个包含十个对象的数组
的指针。
man处理命令行选项:
return语句:
(1)当返回引用时,不是返回复制的值,而是返回的对象的引用(即本身),所以千万不要返回局部变量的引用。
(2)不要返回局部对象的指针,因为当函数结束时,局部对象的内存被释放了,返回的指针就变成了一个空悬指针。
7.1——函数的定义,参数传递,return语句的更多相关文章
- Python函数基础--def及return语句地操作
1·def是可执行的代码 Python的函数是有一个新的语句编写的,即def.不像C这样的编译语言,def 实际上是一个可执行的语句--函数并不存在,直到Python运行了def后才存在.在典型的操作 ...
- 函数----基础,参数传递,返回类型和return语句
一.函数基础1.形参和实参 实参是形参的初始值.第一个实参初始化第一个形参,第二个实参初始化第二个形参,以此类推.尽管实参与形参存在对应关系,但是并没有规定实参的求值顺序.编译器能以任意可行的顺序对实 ...
- Python快速入门学习笔记(三)——函数的定义与调用
定义函数 Python中定义函数的格式为: def fun([参数列表]): ... 函数在执行到return语句时结束,并将结果返回.如果没有return语句,函数执行完毕后返回None. 例: d ...
- 返回类型和return语句
return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return语句有两种形式: return; return expression; 无返回值函数 没有返回值的return语句只 ...
- 关于main函数的定义
很多人甚至市面上的一些书籍,都使用了void main( ),其实这是错误的.C/C++中从来没有定义过void main( ).C++之父Bjarne Stroustrup在他的主页上的FAQ中明 ...
- A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数
第7章 函数 函数是重要的程序段.它们允许你给一块语句一个名称,然后你可以在程序的任何地方使用这个名称任意多次地运行这个语句块.这被称为 调用 函数. 定义函数 函数通过 def 关键字定义.def ...
- 在函数体的“出口处”,对 return 语句的正确性和效率进行检查
在函数体的“出口处”,对 return 语句的正确性和效率进行检查. 如果函数有返回值,那么函数的“出口处”是 return 语句. 我们不要轻视 return 语 句.如果 return 语句写得不 ...
- 返回类型和 return 语句
return 语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return 语句有两种形式: return; return expression; 不要返回局部对象的引用或指针: 函数完成 ...
- python函数,定义,参数,返回值
python中可以将某些具备一定功能的代码写成一个函数,通过函数可以在一定程度上减少代码的冗余,节约书写代码的时间.因为有一些代码实现的功能我们可能会在很多地方用到. 1.函数的声明与定义 通过def ...
- php学习笔记-return语句
一个函数中可以有return语句,也可以没有.什么时候需要呢?就是当你想接收函数的执行结果的时候,你需要一个return 语句. 函数执行完return语句之后,return语句后面的代码是永远不会得 ...
随机推荐
- BOM学习-javascript计时器小结
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- android动画之android:interpolator属性使用
android动画之android:interpolator使用 Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerat ...
- ZIP解压缩文件的工具类【支持多级目录|全】
ZIP解压缩文件的工具类[支持多级目录|全] 作者:Vashon 网上有很多的加压缩示例代码,但是都只是支持一级目录的操作,如果存在多级目录的话就不行了.本解压缩工具类经过多次检查及重构,最终分享给大 ...
- PMP项目管理学习笔记(9)——范围管理
关于范围管理的几个名词定义 产品范围:表示你和你的团队正在构建的产品或服务的特性和功能:产品范围与最终产品有关,包括产品的特性,组件和组成部分.人们谈论确定产品的范围时,大多都是在谈论确定产品的特性, ...
- vim下ctrl + s 僵死问题的解决
vim下ctrl + s 僵死问题的解决 vim 使用vim习惯性手残Ctrl+S ,解决方法 : Ctrl + Q 就能恢复了
- Hibernate Lazy属性与懒加载 整理
lazy概念:要用到的时候,再去加载,对于关联的集合来说,只有当访问到的时候,才去加载它所关联的集合,比如一个user对应很多权限,只有当user.getRights()的时候,才发出select r ...
- SQLite -插入查询
SQLite -插入查询 SQLite插入语句是用来添加新行数据到数据库中的一个表. 语法: 有两种基本的插入语句的语法如下: INSERT INTO TABLE_NAME (column1, co ...
- Python 基础语法学习(第一讲)---类的使用
[写在前面]:其实自学python有一段时间了,但是一直没想起来要写博客来记录自己的学习,今天才感觉要写点什么让自己学的更扎实一点,所以从今天开始更新python自学系列,希望看见文章的大佬们可以指点 ...
- 模板引擎freemarker的使用(二)
freemarker默认配置使用时,如果传到前端的值为null或者不存在,后台会报错. 处理方法: <bean id="freemarkerConfig" class=&qu ...
- mysql查询速度慢的原因[整理版]
在以前的博客中陆续记录了有关查询效率方面的文章.今天在整理一下,写上自己的一些心得记录如下:常见查询慢的原因常见的话会有如下几种:1.没有索引或没有用到索引.PS:索引用来快速地寻找那些具有特定值的记 ...