首页 C引用的作用和用法

C引用的作用和用法

举报
开通vip

C引用的作用和用法C引用的作用和用法 C 引用的作用和用法.txt吃吧吃吧不是罪,再胖的人也有权利去增肥~苗条背后其实是憔悴,爱你的人不会在乎你的腰围~尝尝阔别已久美食的滋味,就算撑死也是一种美~减肥最可怕的不是饥饿,而是你明明不饿但总觉得非得吃点什么才踏实。 本文由zpwodeaia贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C++ 引用的作用和用法 引用就是某一变量(目标)的一个别名, 引用就是某一变量(目标)的一个别名,对引 完全一样。 作完全一样。 引用名=目标变量名 ...

C引用的作用和用法
C引用的作用和用法 C 引用的作用和用法.txt吃吧吃吧不是罪,再胖的人也有权利去增肥~苗条背后其实是憔悴,爱你的人不会在乎你的腰围~尝尝阔别已久美食的滋味,就算撑死也是一种美~减肥最可怕的不是饥饿,而是你明明不饿但总觉得非得吃点什么才踏实。 本文由zpwodeaia贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C++ 引用的作用和用法 引用就是某一变量(目标)的一个别名, 引用就是某一变量(目标)的一个别名,对引 完全一样。 作完全一样。 引用名=目标变量名 引用的声明方法: 引用的操作与对变量直 用名 目标变量名; 引用的声明方法:类型标识符 &引用名 目标变量名; :int 【例 1】 】 : a; int &ra=a; //定义引用 ra,它是变量 a 的引用,即别名 定义引用 它是变量 的引用, 接 操 在此不是求地址运算, (1)&在此不是求地址运算,而是起标识作用。 ) 在此不是求地址运算 而是起标识作用。 (2)类型标识符是指目标变量的类型。 )类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 )声明引用时,必须同时对其进行初始化。 (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用 )引用声明完毕后,相当于目标变量名有两个名称, 且不能再把该引用名作为其他变量名的别名。 名,且不能再把该引用名作为其他变量名的别名。ra=1; 等价于 a=1; (5)声明一个引用,不是新定义了一个变量,它只 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示该引用名是目标变量名 )声明一个引用,不是新定义了一个变量, 的一个别名,它本身不是一种数据类型,因此引用本身不占存储 单元 初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计 , 的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也 不给引用分配存储单元。 对引用求地址,就是对目标变量求地址。 不给引用分配存储单元。故: &a 相等。 相等。 (6)不能建立数组的引对引用求地址,就是对目标变量求地址。&ra 与 用。因为数组是一个由若干个元素所组成的集合,所以 )不能建立数组的引用。因为数组是一个由若干个元素所组成的集合, 无法建立一个数组的别名。 无法建立一个数组的别名。 立引用的引用, ( 7)不能建 立引用的引用 ,不能建立指向引用的指针 。因为引用不是一种 )不能建立引用的引用 不能建立指向引用的指针。 数据类型~ 所以没有引用的引用, ~所以没有引用的引用 数据类型 ~ 所以没有引用的引用 , 没有引用的指针 。 ~ 例如: 例如 : int n; ; int &&r=n; //错误 , 编译系统把 错误, 看成一体, ; 错误 编译系统把"int &"看成一体 , 把 "&r"看成一体 , 看成一体 看成一体 即建立了引用的引用 , 引用的对象应当是某种数据类型的变量 int &*p=n;//错误 , 错误, 编译系统把"int &"看成一体 , " *p "看成一体 , 看成一体, 看成一体, 错误 编译系统把 看成一体 把 看成一体 即建立了指向引用的指针, 即建立了指向引用的指针 , 指针只能指向某种数据类型的变量 ( 8) 值得一提的是 , 可以建立指针的引用 ) 值得一提的是, 例如: 例如 : int *p; int *&q=p;//正确 , 编译系统把 int * "看成一体 , 把 "&q"看成一体 , 正确, 看成一体, 看成一体, 正确 编译系统把" 看成一体 看成一体 的引用, 即建立指针 p 的引用 , 亦即给指针 p 起别名 q。 。 引用应用 1、引用作为参数 、 引用的一个重要作用就是作为函数的参数。 引用的一个重要作用就是作为函数的参数。以前的 C 语言中函数参数传递是 值传递,如果有大块数据作为参数传递的时候,采用的 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 往往是指针, 值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为 这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在( 这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中) 中 又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择) ,就是引 又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择) 就是引 , 用。 【例 2】 】 : void swap(int &p1, int &p2) { int p; p=p1; p1=p2; p2=p; } // 此处函数的形参 p1, p2 都是引用 此处函数的形参 为在程序中调用该函数,则相应的主调函数的调用点处, 为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实 参进行调用即可,而不需要实参变量有任何的特殊要求。 参进行调用即可,而不需要实参变量有任何的特殊要求。如:对应上面定义的 swap 函数,相应的主调函数可写为: 函数,相应的主调函数可写为: main( ) { int a,b; cin>>a>>b; //输入 a,b 两变量的值 输入 swap(a,b); //直接以变量 a 和 b 作为实参调用 swap 函数 cout< float temp; //定义全局变量 temp 定义全局变量 float fn1(float r); 直接以变量 //声明函数 fn1 声明函数 float &fn2(float r); //声明函数 fn2 声明函数 float fn1(float r) //定义函数 fn1,它以返回值的方法返回函数值 定义函数 ,它以返回值的方法返回函数值 { temp=(float)(r*r*3.14); return temp; } float &fn2(float r) //定义函数 fn2,它以引用方式返回函数值 定义函数 , { temp=(float)(r*r*3.14); return temp; } void main() //主函数 主函数 { float a=fn1(10.0); //第 1 种情况,系统生成要返回值的副本(即临时变量) 第 种情况,系统生成要返回值的副本(即临时变量) float &b=fn1(10.0); //第 2 种情况,可能会出错(不同 C++系统有不同规定) 系统有不同规定) 第 种情况,可能会出错( 系统有不同规定 //不能从被调函数中返回一个临时变量或局部变量的引用 不能从被调函数中返回一个临时变量或局部变量的引用 float c=fn2(10.0); //第 3 种情况,系统不生成返回值的副本 第 种情况, //可以从被调函数中返回一个全局变量的引用 可以从被调函数中返回一个全局变量的引用 float &d=fn2(10.0); //第 4 种情况,系统不生成返回值的副本 第 种情况, //可以从被调函数中返回一个全局变量的引用 可以从被调函数中返回一个全局变量的引用 cout<>, 这两个操作符常常希望被连续使用, 例如: << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引 可选的其它方案包括:返回一个流对象和返回一个流对象指针。 用。可选的 其它方案包括:返回一个流对象和返回一个流对象指针。但是对于 返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说, 返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连 续的两个<<操作符实际上是针对不同对象的 这无法让人接受。 操作符实际上是针对不同对象的~ 续的两个 操作符实际上是针对不同对象的~这无法让人接受。对于返回一个 流指针则不能连续使用<<操作符 因此,返回一个流对象引用是惟一选择。 操作符。 流指针则不能连续使用 操作符。因此,返回一个流对象引用是惟一 个唯一选择很关键,选择。这 个唯一选择很关键,它说明了引用的重要性以及无可替代性, 它说明了引用的重要性以及无可替代性,也许这就是 C++ 语言中引入引用这个概念的原因吧。 赋值操作符=。 语言中引入引用这个概念的原因吧。 赋值操作符 。这个操作符象流操作符一 是可以连续使用的,例如: 或者(x=10)=100;赋值操作符的返回值必 样,是可以连续使用的,例如:x = j = 10;或者 或者 赋值操作符的返回值必 须是一个左值,以便可以被继续赋值。 须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值 选择。 选择。 【例 6】 测试用返回引用的函数值作为赋值表达式的左值。 】 测试用返回引用的函数值作为赋值表达式的左值。 ,i nclude int &put(int n); int vals[10]; int error=-1; void main() { put(0)=10; //以 put(0)函数值作为左值,等价于 vals[0]=10; 函数值作为左值, 以 函数值作为左值 put(9)=20; //以 put(9)函数值作为左值,等价于 vals[9]=10; 函数值作为左值, 以 函数值作为左值 cout<=0 && n<=9 ) return vals[n]; else { cout<<"subscript error"; return error; } } 四则运算符。 (5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则 )在另外的一些操作符中,却千万不能返回引用: 能返回引用, 详细的讨运算符。它们不 论了这个问题。 能返回引用,Effective C++[1]的 Item23 详细的讨论了这个问题。主要原因是这四 的 个操作符没有 side effect,因此,它们必须构造一个对象作为返回值,可选的方 ,因此,它们必须构造一个对象作为返回值, 案包括:返回一个对象、返回一个局部变量的引用, 案包括:返回一个对象、返回一个局部变量的引用,返回一个 new 分配的对象 的引用、 返回一个静态对象引用。 根据前面提到的引用作为返回值的三个规则, 的引用、 返回一个静态对象引用。 根据前面提到的引用作为返回值的三个规则, 3 静态对象的引用又因为((a+b) == (c+d))会永远为 true 第 2、 两个方案都被否决了。 、 两个方案都被否决了。 静态对象的引用又因为 会永远为 而导致错误。所以可选的只剩下返回一个对象了。 而导致错误。所以可选的只剩下返回一个对象了。 4、引用和多态 、 引用是除指针外另一个可以产生多态效果的手段。这意味着, 引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引 用可以指向它的派生类实例。 用可以指向它的派生类实例。 【例 7】 】 : class A; class B:public A{……}; : B b; A &Ref = b; // 用派生类对象初始化基类对象的引用 Ref 只能用来访问派生类对象中从基类继承下来的成员, 只能用来访问派生类对象中从基类继承下来的成员, 是基类引用指向派生类。 是基类引用指向派生类。 类中定义有虚函数, 类中重写了这个虚函数, 如果 A 类中定义有虚函数,并且在 B 类中重写了这个虚函数,就可以通过 Ref 产生多态效果。 产生多态效果。 引用总结 (1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主 )在引用的使用中,单纯给某个变量取个别名是毫无意义的, 要用于在函数参数传递中, 要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问 题。 用引用传递函数的参数, 能保证参数传递中不产生副本, 提高传递的效率, (2) ) 用引用传递函数的参数, 能保证参数传递中不产生副本, 提高传递的效率, 的使用,保证了引用传递的安全性。 且通过 const 的使用,保证了引用传递的安全性。 (3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指 )引用与指针的区别是,指针通过某 个指针变量指向一个对象后, 向的变量间接操作。程序中使用指针,程序的可读性差; 向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标 变量的别名,对引用的操作就是对目标变量的操作。 变量的别名,对引用的操作就是对目标变量的操作。 的返回值、 (4)使用引用的时机。流操作符 和>>、赋值操作符 的返回值、拷贝构造函 )使用引用的时机。流操作符<<和 、赋值操作符=的返回值 数的参数、赋值操作符=的参数 其它情况都推荐使用引用。 的参数、 数的参数、赋值操作符 的参数、其它情况都推荐使用引用。 1
本文档为【C引用的作用和用法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_036899
暂无简介~
格式:doc
大小:23KB
软件:Word
页数:8
分类:工学
上传时间:2017-09-20
浏览量:17