一、定义

引用变量是已定义变量的别名,如将ra设置为a的引用变量,则可以使用ra和a交替使用该变量。

表示:

int a = 5;

int & ra = a;

其中&不是地址运算符,而是类型标示符的一部分。

二、含义

使用引用变量ra和变量a都指向同一个地址,都可以改变变量的值。

三、引用变量和指针的区别

int a = 100;

int & ra = a;     //ra a reference

int * pa = &a;  //pa a pointer

1、表示法不同:

表达式ra和*pa都可以和a交换,而表达式&ra和pa都可以和&a交换。

2、初始化不同:

引用变量必须在声明时初始化

int a;

int & ra = a;

指针可以先声明,再初始化

int a;

int * pa;

pa = &a;

四、应用

1、可以通过初始化设置引用,不可以通过赋值设置:

int A = 2;
int & a = A;
cout << "A = " << A << ",a = " << a << endl;
cout << "A adress = " << &A << ",a address = " << &a << endl;
int b = 3;
a = b;
cout << "A = " << A << ",a = " << a << ",b = " << b << endl;
cout << "A adress = " << &A << ",a address = " << &a << ",b address = " << &b << endl;

——————程序运行结果——————

A = 2,a = 2
A adress = 0x22fef8,a address = 0x22fef8
A = 3,a = 3,b = 3
A adress = 0x22fef8,a address = 0x22fef8,b address = 0x22fef4

由上可知,a = b,等同于A = b;结果是a和A的值都变成了3,但是两个变量的地址没变,说明不可以通过赋值设置引用变量,一旦初始化设置了就不可以改变。

2、将引用用作函数参数:

void swapv(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
}

void swapp(int * m, int * n){
int temp;
temp = *m;
*m = *n;
*n = temp;
}

void swapr(int & m, int & n){
int temp;
temp = m;
m = n;
n = temp;
}

int a = 2;
int b = 6;
swapv(a, b);
cout << "use value " << "a = " << a << ", b = " << b << endl;
swapp(&a, &b);
cout << "use pointer " << "a = " << a << ", b = " << b << endl;
swapr(a, b);
cout << "use reference chang again " << "a = " << a << ", b = " << b << endl;

——————程序运行结果——————

use value a = 2, b = 6
use pointer a = 6, b = 2
use reference chang again a = 2, b = 6

由上可知,只有指针和引用变量可以交换数据,赋值方式不可。

c++新特性---引用变量的更多相关文章

  1. List集合及新特性引用

    ArrayList就是动态数组,也是一个对象. 创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域. 1.ArrayList是用数组实现的,这个数组的内存是连续的,不存在 ...

  2. java基础学习总结三(jdk7新特性、变量(局部变量和成员变量)、常量以及运算符)

    一:jdk7新特性 可以表示二进制数值,以0b开头,中间可以使用下划线_分隔符.如下: @Test /** * 测试jdk新特性 */ public void testJdk7(){ int a=0b ...

  3. C++11 新特性总结

    前言 转载请注明出处,感谢! C++11 的新特性 1 变量和基本类型 1.1 long long 类型 扩展精度浮点数,10位有效数字 1.2 列表初始化 初始化的几种不同形式,其中用花括号来初始化 ...

  4. 前端学习笔记 --ES6新特性

    前言 这篇博客是我在b站进行学习es6课程时的笔记总结与补充. 此处贴出up主的教程视频地址:深入解读ES6系列(全18讲) 1.ES6学习之路 1.1 ES6新特性 1. 变量 2. 函数 3. 数 ...

  5. 【转】C++11 标准新特性: 右值引用与转移语义

    VS2013出来了,对于C++来说,最大的改变莫过于对于C++11新特性的支持,在网上搜了一下C++11的介绍,发现这篇文章非常不错,分享给大家同时自己作为存档. 原文地址:http://www.ib ...

  6. C++11新特性:右值引用和转移构造函数

    问题背景 #include <iostream> using namespace std; vector<int> doubleValues (const vector< ...

  7. C++11 标准新特性: 右值引用与转移语义

    文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) ...

  8. 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用

    一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...

  9. jdk1.8新特性之方法引用

    方法引用其实就是方法调用,符号是两个冒号::来表示,左边是对象或类,右边是方法.它其实就是lambda表达式的进一步简化.如果不使用lambda表达式,那么也就没必要用方法引用了.啥是lambda,参 ...

随机推荐

  1. linux下Oracle11g RAC搭建(二)

    linux下Oracle11g RAC搭建(二) 一.安装前配置 网络的配置 IP占用測试 进入windows下.运行cmd,使用ping命令验证网段是否被占用. 注:用哪个网段都行,一定保证不要被其 ...

  2. 伪分布模式安装hadoop

    准备工具: 虚拟机:VMware Linux系统:CentOS hadoop-1.1.2.tar.gz jdk-7u75-linux-x64.gz CentOS的网络配置 1.设置主机中VMware ...

  3. js实现图片的等比例缩放

      js实现图片的等比例缩放 CreateTime--2018年3月6日14:04:18 Author:Marydon 1.代码展示 /** * 图片按宽高比例进行自动缩放 * @param ImgO ...

  4. struts2自定义登录拦截器

    版权声明:本文为博主原创文章,未经博主允许不得转载. (1)配置web.xml,让xml加载struts2框架 <?xml version="1.0" encoding=&q ...

  5. .Net操作Excel,Work等几种解决方案

    (一)传统操作Excel遇到的问题: 1.如果是.NET[使用office组件Microsoft.Iffice.interop.Excel的话],需要在服务器端装Office,且及时更新它,以防漏洞, ...

  6. Maven的镜像设置

    文件位置 国内的阿里云 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven< ...

  7. 分享几款流行的Java框架

    虽然Java一直被唱衰,但是直到现在Java软件开发也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,下面分享几个个人认为还不错的Java框架,以及各自的优缺点,希望能对大家有帮助. ...

  8. tomcat中的Manager App帐号password管理

    tomcat根文件夹下的conf文件夹下有个tomcat-users.xml文件 填写内容例如以下 <? xml version='1.0' encoding='utf-8'? >< ...

  9. Unity3D碰撞器事件测试(Rigidbody/Kinematic/Trigger/Collider)

    1.Kinematic和刚体之间的碰撞事件 Unity官方有一个详细的碰撞关系表:http://docs.unity3d.com/Manual/CollidersOverview.html 但其实可以 ...

  10. ToStringBuilder学习(三):readResolve()方法与序列化

    在ToStringBuilder学习(一)中提到一个问题,即 readResolve方法是干啥的? 当时也没多想, 只是列在那里, 今天忙里偷闲地把搜点材料整理下这个问题. 原来这个方法跟对象的序列化 ...