所谓引用就是为对象起一个别名。例如变量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的地址是没有改变的,那么根据他们的地址就可以操作他们的值,也就不用考虑函数生命周期了。举的例子比较简单,实际中的应用比这个复杂的多。只要能理解就好。

C++中引用与取地址的更多相关文章

  1. [转载]C++中 引用&与取地址&的区别

    一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用.     例如: int &rf; // 声明一个int型的引用r ...

  2. C++中 引用&与取地址&的区别

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  3. 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)

    一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = &num; printf( ...

  4. 搬运1:关于对C语言中数组名取地址加减等操作的一点探究

    对于数组名取地址强制转换的操作 偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西. 代码如下: #include<stdio.h> ...

  5. C语言中指针和取地址符&的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  6. c++ 引用& 与 取地址&

    https://www.csdn.net/gather_2e/NtjaYgzsNTctYmxvZwO0O0OO0O0O.html 还有指针和取值: int& a = b; int *c = & ...

  7. C++中引用的本质

    一般的教材上讲到引用时,都是说"引用是对象的一个别名".我认为这种定义是不清晰的,不利于初学者理解引用.至少我自己曾经被这个定义困扰了一段时间.到底什么是"别名" ...

  8. C++中引用的本质是什么?

    一般的教材上讲到引用时,都是说“引用是对象的一个别名”.我认为这种定义是不清晰的,不利于初学者理解引用.至少我自己曾经被这个定义困扰了一段时间.到底什么是“别名”? 实际上,引用的实质是位于xxxxx ...

  9. C++中引用的底层实现

    为了研究一下C++中引用的底层实现,写了一个小代码验证其中的基本原理. 引用是一个变量的别名,到底会不会为引用申请内存空间?如果申请空间,空间存放的是什么,下面的代码就主要解决这个疑问. 代码如下,详 ...

随机推荐

  1. POJ 1459 &amp;&amp; ZOJ 1734--Power Network【最大流dinic】

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 25108   Accepted: 13077 D ...

  2. JQuery------各种版本下载

    转载: http://www.jq22.com/jquery-info122

  3. Java实现窗体动态加载磁盘文件

    在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹.本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件:如果该文件是隐藏文件,就在 ...

  4. PHP 5.4 中的traits

    PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西. Traits (横向重用/多重继 ...

  5. 线程同步 – lock和Monitor

    在多线程代码中,多个线程可能会访问一些公共的资源(变量.方法逻辑等等),这些公共资源称为临界区(共享区):临界区的资源是不安全,所以需要通过线程同步对多个访问临界区的线程进行控制. 同样,有些时候我们 ...

  6. 【代码审计】MIPCMS 远程写入配置文件Getshell

    0x00 环境准备 MIPCMS官网:https://www.mipcms.cn 网站源码版本:MIPCMS内容管理系统 V3.1.0(发布时间:2018-01-01) 程序源码下载:http://w ...

  7. phpQuery的用法

    一.phpQuery的hello word! 下面简单举例: include 'phpQuery.php'; phpQuery::newDocumentFile('http://www.phper.o ...

  8. PHP 简易导出excel 类解决Excel 打开乱码

    <?php class exportCsv{ //列名 protected $_column = array(); protected $_reg = array(); public $ret ...

  9. Linux下Apache网站目录读写权限的设置

    网站目录文件权限的设置对网站的安全至关重要,下面简单介绍网站目录文件权限的基本设定. 我们假设http服务器运行的用户和用户组是www,网站用户为centos,网站根目录是/home/centos/w ...

  10. Matlab 二维绘图函数(plot类)

    plot 功能 绘制二维图形的最基本函数. 语法 //x为向量时,以x的元素值为纵坐标,x的序号为横坐标绘制曲线. //x为矩阵时,以其序号为横坐标,按列绘制每列元素值相对于其序号的曲线. polt( ...