- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 6章 指针、结构体及引用 ………. 6.4 引用类型 6.5 程序实例 6.4 引用类型 ? 引用(reference)是C++语言特有的数据形式。它的存在不仅像数组和指针那样依赖于已有的类型,而且它还依赖于一个已有的变量。 简单的说,引用是某个变量或对象的别名。建立引用,必须用某个变量名或对象名来对它进行初始化,从而将该引用绑定在那一个变量或对象上。 即是说,建立引用并不重新为其分配内存空间,引用只是另一变量或对象的别名,任何对引用的使用与改变都是对该引用所绑定的那一变量或对象的使用与改变。 1. 引用变量的说明 建立引用的格式如下: 类型 变量名 = 对象变量名 ? 例如: int a=2, b; int refa=a; //引用refa是int型变量a的别名 int refb=b; //引用refb是int型变量b的别名 那么经赋值“refb=55;”以及“refa+=2;”之后,b与refb的当前值都将是55,而a与refa都在原有值2的基础上增加了2,即当前值都变成了4。 2. 引用和指针的区别 引用和指针从说明到使用上都有些相似,但在概念上却有着明显的不同。主要区别在以下几个方面。 ? (1) 指针表示的是一个对象变量的地址,而引用则表示一个对象变量的别名。因此在程序中表示其对象变量时,前者要通过取内容运算符“*”,而后者可直接代表。例如: int a; int *pa=a; int ra=a; ? 当要对a赋值123时,下述三个语句是等价的: a=123; *pa=123; ra=123; 引用类型变量与其他类型变量不同,它没有自己的值和地址空间,只是作为另一变量的别名,在它的生存期期间两个名字绑定在一起,因此,引用类型的使用是有限制的: 引用类型变量不能被引用; 引用类型不能组成数组; 引用类型不能定义指针。 正是这些限制,保证了它的安全性,反而成为人们选择它取代方便灵活的指针的原因。 (2) 指针是可变的,它可以指向变量a,也可以指向变量b,而引用则只能在建立时一次确定(固定绑定在某一个变量上),不可改变。例如: int a,b=456; int *p=a; int ra=a; 以后再执行“p=b;”是合法的,它使指针p又改指变量b。但不能通过“ra=b;”的赋值或“int ra=b;”的重新建立新的绑定关系来改变引用ra。前者的“ra=b;”的赋值只是将b的值(即456)赋给了与ra绑定的变量a以及引用ra本身;而后者试图为引用ra重新建立新的绑定关系则会导致出现一个编译错误(ra重定义,重复初始化)。 (3) 由于引用本身不是一个独立的变量(它本身不具有独立的变量地址,使用的是与其绑定的那一变量的地址),所以,不能出现引用的引用,不能出现元素为引用的数组,也不能使用指向引用的指针(注意,可以出现指针的指针、可以出现元素为指针的数组,也可以说明对指针的引用,这都缘于指针是独立变量的缘故)。 int ref; //ERR! 不能出现引用的引用 int refa[10]; //ERR! 不能出现元素为引用的数组 int *refp; //ERR! 不能使用指向引用的指针 int *pi, *pref=pi; //OK! 可以说明对指针的引用 //将引用pref与int*类型的指针变量pi进行了绑定 3. 引用型参数 ? 以“类型”形式说明的函数参数,可实现“双向传值”(被调函数中对形参值的使用与改变,就是对主调函数中调用语句处所对应实参变量值的直接使用与改变)。 可这样理解:引用型形参是调用语句处所对应实参变量的别名,而且系统又将该形参与实参进行了绑定。 引用参数的某些内容与用法已在 赋值参数与引用参数一节中介绍过,请参阅。 4. 引用型的函数返回值 非引用型的函数通常仅返回一个值,而若把函数的返回类型说明为引用型时,则这个函数除返回一个值外,而且还返回了它的“别名”--该函数调用的结果还可以被赋值(调用结果可以作左值!)。 下面给出一个示意性的例子: int maxr(int m, int n) { //返回值类型为引用类型 if(mn) return m; return n; } //由于函数类型为引用,返回的必须是变量(可作左值) int a=2, b=4, c; c=maxr(a
您可能关注的文档
- 南京师范大学教科院视觉文化与媒介素养课件 陶俑――化腐朽为神奇的造就.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 透过陶瓷看历史.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 我们用眼睛寻找宝藏――读图时代“看”行为的变迁与意义.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 信息时代的知识表征.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 影视――光影中的时空之舞.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 知识可视化工具――思维地图.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 中国古建筑――可触可见的历史.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 中国民间剪纸――刀舞下的平面影像.ppt
- 南京师范大学教科院视觉文化与媒介素养课件 中国悠久的传统水墨艺术.ppt
- 南京师范大学教师教育学院中学教育概论课件 绪论.ppt
文档评论(0)