浅谈引用_wss.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈引用_wss

作者:王姗姗,华清远见嵌入式学院讲师。 引用是C++引入的新语言特性,是C++常用的一个重要内容之一。在网上查了些资料后,在这我希望能用过一些简单的应用来对引用进行分析。 引用的定义: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明: 类型标示符 &引用名=目标变量名 例如: ????????int a; ????????int b=a; 在这里定义了b为a的引用,通过这样的引用,a和b表示同一对象。在这要特别的强调的是引用并不产生对象的副本,仅仅是对象的同义词。不是求址运算,只是一个标识符,表示定义的是一个类型标识符型的一个变量的引用。 引用的规则: ????????(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 ????????(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。 ????????(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。 ????????(4)声明一个引用,不是定义一个变量,它只表示该引用名是目标变量的一个别名,所以它本身不是一种数据结构,因此引用本身不占存储单元,系统也不给引用分配存储单元。所以对引用求地址,就是对目标变量求地址。 ????????(5)不能建立数组的引用。因为数组是一个由若干元素组成的集合,所以没有办法建立一个数组的别名。 引用的主要功能: ????????(1)传递函数的参数 与C语言不同,C++语言中,函数的参数和返回值的传递方式除了有值传递、指针传递还有引用传递。在C语言中如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,从而提高效率。而在C++中,它提供了一种提高程序效率的方法,就是引用。 void swap(int *p,int *q) ????????{ ????????????????int temp; ????????????????temp = *p; ????????????????*p=*q; ????????????????*q=temp; ????????} 在C++中我们就可以改善我们的程序,写成: void swap(int p,int q) ????????{ ????????????????int temp; ????????????????temp = p; ????????????????p=q; ????????????????q=temp; ????????} 这个时候我们写主函数的时候就不用再写成swap(a,b)直接写成swap(a,b)。 从例子中我们可以看出: (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。 (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。 (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用*指针变量名的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。 在这就得弄明白c++中引用和指针的区别: (a)非空区别。在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让他指向一个对象,但是该变量在某些时候也可能不指向任何对象,这是你应该把变量声明为指针,因为这样你可以赋予空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。不存在指向空值得引用这个事实意味着使用引用的代码效率比使用指针要高。 (b)合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。 (c)可修改区别。指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则是总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。 (d)应用区别。总的来说,在以下情况下你应该使用指针:一是你考虑到存在不指向任何对象对象的可能(在这种情况下,你能够设置指针为空),二是你需

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档