所谓引用就是为对象起一个别名。例如变量b = &a,b就是a的一个引用。对b的任何操作等同于对a的操作,也就是说,如果你改变了b的值,同时a的值也会发生改变。b就是a的另外一个名字,他们实质是同一个变量。就好比是同一个人,只不过穿着不同的衣服而已。至于引用的用处,给你举一个简单的例子,比如一个交换两个值的函数swap(int a, int b),如果将两个值带进去,发生交换的只是形参a和b,因为函数结束的时候这两个参数的生命周期结束了,换句话说,实参a和b的值并未发生交换。而如果swap(int &a,int &b)则不同,他的参数是a和b的引用,也就是说函数中的a和b就是你带入的实参,当函数中的a和b发生变化时,被引用的值在同时也发生了变化,而不会受到函数声明周期的影响。取地址则顾名思义,就是取得对象的地址,通过指针来操作对象,也可以达到引用的效果,它不是直接对对象进行操作,而是根据对象的地址。与引用不同的是,引用是不占用存储空间的,而如果用指针指向对象地址的时候会有自己的存储空间。举个简单的例子,swap(int *a, int *b), *a和*b是指向实参的指针,即他们有实参的地址,而我们知道a和b的地址是没有改变的,那么根据他们的地址就可以操作他们的值,也就不用考虑函数生命周期了。举的例子比较简单,实际中的应用比这个复杂的多。只要能理解就好。

最新文章

  1. iis虚拟目录名称“ReportServer”的巧合
  2. IOS主要框架介绍(转)
  3. ENode 1.0 - 消息队列的设计思路
  4. MySql 中 case when then else end 的用法
  5. windows 远程桌面研究
  6. oracle中删除表中某字段出现重复的信息 保留其中一条
  7. linux的cgroup控制
  8. java用代理访问
  9. Visual Studio C++ Command Line
  10. 【转】CHAR CHARACTER VARCHAR NCHAR NVARCHAR NVARCHAR2区别
  11. moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
  12. SSLv3协议、TLSv1.2协议配置不对导致javax.ws.rs.ProcessingException: java.net.SocketException: Connection reset
  13. 数据库 SQL Server2012安装步骤详解
  14. mybatis_SQL缓存(5)
  15. 最优装载—dp
  16. 【Java并发.6】结构化并发应用程序
  17. anaconda安装win10
  18. 牛客练习赛13F m皇后
  19. 6.3Pytyhon文件的操作(三)
  20. linux配置无秘钥登陆

热门文章

  1. Tomcat------如何更改被IIS占用的80端口
  2. 使用npm国内镜像
  3. MyBatis入门程序之整合Spring
  4. windows恶意软件删除工具(MRT.exe)检查计算机是否感染病毒使用图解
  5. Unity弹出MessageBox
  6. BugHD 与你的应用一起成长
  7. [C] include <filename> 和 include "filename" 的区别
  8. jQuery ajax中serialize()方法增加其他参数
  9. 用MyEclipse将Maven Dependencies中的jar包导出
  10. 《转载》Fiddler 抓包工具总结