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语句后面的代码是永远不会得 ...
随机推荐
- CSS进阶:提高你前端水平的 4 个技巧
译者注:随着 Node.js .react-native 等技术的不断出现,和互联网行业的创业的层出不穷,了解些前端知识,成为全栈攻城师,快速的产出原型,展示你的创意,对程序员,尤其是在创业的程序员来 ...
- BigDecimal取余运算
取余运算在编程中运用非常广泛,对于BigDecimal对象取余运算可以通过divideAndRemainder方法实现. public BigDecimal[] divideAndRemainder( ...
- oracle适配器连接不上解决方案
Oracle适配器连接不上解决方案 作者:Vashon oracle 的Developer连接不上报错:listener does not currently know of SID given in ...
- 获取父页面的dom元素
$("li.jericho_tabs", window.top.document); 上面的代码意思是获取父页面的li元素,class为jericho_tabs的所有元素.
- phpstorm 格式化代码
MAC 安装phpcs.phpcbf composer global require 'squizlabs/php_codesniffer=*' Changed current directory t ...
- mac homebrew安装
http://book.51cto.com/art/201107/278761.htm 3.2.3 使用 Homebrew 安装 Git Mac OS X 有好几个包管理器,用于管理一些开源软件在 M ...
- javaee 第四周作业
分析hello.java.下载链接:https://github.com/javaee/tutorial-examples/tree/master/web/jsf/hello1 /** * Copyr ...
- Unity3D windows平台视频录制录屏插件 UnityRecorder
例子:从官方例子简单改了 using UnityEditor;using UnityEditor.Recorder;using UnityEditor.Recorder.Input;using Sys ...
- 什么是WebSocket (经常听别人讲感觉很高大上其实不然)
WebSocket 协议在2008年诞生,2011年成为国际标准.现在所有浏览器都已经支持了.WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真 ...
- Java多线程的内存模型和Thread状态切换
线程的内存模型 32位操作系统的寻址空间为2的32次方,也就是4GB的寻址空间:系统在这4GB的空间里划分出1GB的空间给系统专用,称作内核空间,具有最高权限:剩下3GB的空间为用户空间(一般JVM的 ...