




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第9章引用,徐素锦,2,本章主要内容,9.1引用的概念9.2引用的操作9.3什么能被引用9.4用引用传递函数参数9.5返回多个值9.6用引用返回值9.7函数调用作为左值9.8用const限定引用9.9返回堆中变量的引用作业,3,学习目标,理解引用的概念;掌握引用的用法;理解使用引用传递函数参数的目的和方法;理解指针和引用的区别。,4,9.1引用的概念,引用是C+引入的新特性,是C+常用的一个重要内容,也是一个与内存空间密切相关的特殊数据类型。为了能像变量那样使用变量名来引用一个已分配的内存空间,C+允许用户在程序中声明一个标识符使其具有这样的性质,这个标识符就是引用。引用:给某一变量(或对象)
2、起一个“别名”,对引用的操作与对变量直接操作完全一样。,5,9.1引用的概念,声明和初始化引用的一般格式:引用的数据类型必须和被引用的内存空间的数据类型一致。inta;int,r1和r2都是变量a的内存空间的标识,以后就可在程序中使用r1和r2标识符直接对其所引用的内存空间进行操作。,注意:引用不是值,不占存储空间,因而从概念上讲,引用只有声明,没有定义。,6,9.1引用的概念,/Ch9_1.cpp#includeintmain()intintOne;int,运行结果:intOne:5rInt:5intOne:7rInt:7,7,9.2引用的操作,使用引用的操作使用一个对象的引用,如同使用其“
3、真名”例:#includeintmain()intx=100;int,执行结果:1001000 x0013FF7C0 x0013FF7C9999990 x0013FF740 x0013FF74,/ch9_3.cpp引用的操作#includeintmain()intintOne;int,/等价于intOne=intTwo;,执行结果:intOne:5rInt:5;int,inta10;int/,inta;int/,14,9.4用引用传递函数参数,1.引用传递参数即:用引用作函数的参数/ch9_4.cpp#includevoidswap(int,运行结果为:beforeswap,x:5,y:6af
4、terswap,x:6,y:5,15,9.4用引用传递函数参数,优点:起到指针的作用,并不建立参数的拷贝,并且用法比指针更加简单。,图9-4传递引用的内存布局,16,2.引用存在的问题引用隐藏了函数所使用的参数传递的类型,所以无法从所看到的函数调用判断其是值传递还是引用传递。例如,下面的代码中两个重载函数将引起编译错误。voidfn(ints)/voidfn(int/error无法确知匹配哪一个函数,Page16,9.4用引用传递函数参数,17,9.5返回多个值,如果程序需要从函数“带回”多个值怎么办?由于return只能返回一个值,可以通过参数带回多个值;指针作为函数参数可以带回多个值;由于
5、引用是“别名”,引用作为函数形参,实参与形参之间不是值传递,而是一种“映射”,所以对形参的改变,实际上就是对实参的改变。,/ch9_5.cpp计算n的平方,立方,并返回状态信息#includeintFactor(int,int,19,9.6用引用返回值,函数返回值时,要生成一个值的副本,而用引用返回值时,不生成值的副本。例如,下面的程序是有关引用返回的四种形式。/ch9_6.cpp#includefloattemp;/全局变量floatfn1(floatr)temp=r*r*3.14;returntemp;float,intmain()floata=fn1(5.0);/1float,运行结果为
6、:78.578.578.578.5,21,9.6用引用返回值,第一种情况:floata=fn1(5.0);,图9-5返回值方式的内存布局,22,9.6用引用返回值,第二种情况:float,图9-6返回值初始引用的情形,23,9.6用引用返回值,第三种情况:floatc=fn2(5.0);,图9-7返回引用方式,24,9.6用引用返回值,第四种情况:float,图9-8返回引用方式的值作为引用的初始值,25,9.6用引用返回值,说明:函数返回一个引用该函数中return后面必须是一个已分配的内存空间的标识,不能是表达式。函数不能返回一个局部变量的内存空间的引用。函数可以返回全局变量,静态变量,和
7、堆中变量的引用。,26,9.7函数调用作为左值,当返回一个引用时,使得一个函数调用表达式成为左值表达式。#includeint/返回:aindex,27,9.7函数调用作为左值,intmain()inta=1,3,5,7,9;couta2endl;cout(fn(2,a)=55)endl;couta2endl;说明:函数fn()的返回值是一个引用,即引用到变量r上;而r是aindex的引用,所以实际上函数的返回值“引用”到变量aindex上。所以,函数调用fn()可以作为左值表达式。,执行结果:55555,28,9.8用const限定引用,问题的提出:调用函数时,要建立实参的副本(把实参拷贝给形参),如果被传递的数据类型很大,开销也很大,不可取。如果采用指针或引用的形式,则可以不建立副本,但是会产生实参被修改的危险(如果不希望实参被修改的话)。所以,如果调用函数时不建立副本以提高运行效率,又不希望有实参被改动的危险,则采用传递const指针或const引用(即:实参是地址或引用,形参定义成const型的指针或引用)的方法。,/ch9_10.cpp用const限定引用#includedouble,运行结果为:fnbeingcalledthevalueis:345.6377.6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河道垃圾清理施工方案
- 外墙保温真石漆劳务分包合同
- 房屋居间租赁服务合同
- 嘉兴拆烟囱施工方案
- 合同协议生产合同
- 心理学认知过程与个性发展题库
- 人力资源行业数据统计表一览(按职位类型)
- 个人学习成长记录表
- 吉林压花地坪施工方案
- 建筑劳务木工班组合同
- Unit 2 Special Days(说课稿)2023-2024学年人教新起点版英语五年级下册
- 脑室镜手术配合
- 2024年湖南省中考数学试卷含答案
- 浓香白酒采购合同范例
- GB/T 11981-2024建筑用轻钢龙骨
- 药店信息化管理制度
- 2023年山东省德州市中考化学试题
- 全媒体运营师试题库(含答案)
- DB11T 1832.10-2022 建筑工程施工工艺规程 第10部分:装饰装修工程
- 气胸完整版本
- 湘教版六年级下册全部美术教案课程
评论
0/150
提交评论