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语句后面的代码是永远不会得 ...
随机推荐
- Dom 获取、Dom动态创建节点
一.Dom获取 1.全称:Document Object Model 文档对象模型 2.我们常用的节点类型 元素(标签)节点.文本节点.属性节点(也就是标签里的属性). 3.docum ...
- postgresql 9.4.17 64位安装说明
本文在win 7 64位下安装postgresql 9.4.17 64位版,安装过程有录入项的界面都有截图 运行安装程序开始安装 开始时可能自动安装c++运行环境 然后正式开始安装 安装目录位置,不要 ...
- 在Servlet中使用@Autowire的方法
在你调用的Servlet中添加如下代码: public void init(ServletConfig config) { try { super.init(config); SpringBeanAu ...
- SQLite-And和OR运算符
SQLite - AND 和 OR 运算符 SQLite AND . OR运算符用于编译多个条件缩小在一个SQLite声明中选定的数据.这两个操作符被称为连接的操作符. 这些操作符与不同操作提供了一种 ...
- ES6(vue)对象词法扩展
ES6 允许声明在对象字面量时使用简写语法,来初始化属性变量和函数的定义方法,并且允许在对象属性中进行计算操作: function getCar(make, model, value) { retur ...
- java程序中中文没有乱码,存入数据库后中文乱码问题
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/sys_user?useOldAliasMetadataBe ...
- ios之AFN
https://github.com/AFNetworking/AFNetworking 与asi-http-request功能类似的网络库,不过是基于NSURLConnection 和 NSOper ...
- C++关键字(保留字)
C++ 关键字 点击下表以进入具体释义 __abstract 2 __alignof Operator __asm __assume __based __box 2 __cdecl __declspe ...
- ZooKeeper运行原理和基本编程接口
什么是ZooKeeper ZooKeeper作为一个分布式的服务框架(与Google Chubby类似),主要用于解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数 ...
- 7. ENGINES
7. ENGINES ENGINES表提供有关存储引擎的信息. 这对于检查是否支持存储引擎或查看默认引擎是什么特别有用. INFORMATION_SCHEMA Name SHOW Name ENGIN ...