一、定义

引用变量是已定义变量的别名,如将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. openerp 6.0.2库存业务

    一.复式库存(Double-Entry Stock Management)和库存移动(Stock Move) OpenERP的库存管理采取了独特的复式库存(Double-Entry Stock Man ...

  2. ECMAScript 6 | 新特性

    新特性概览 参考文章: http://www.cnblogs.com/Wayou/p/es6_new_features.html ——————————————————————————————————— ...

  3. iOS小知识点记录

    1.创建视图的两种方法:用代码创建视图,创建XIB文件.如何决定使用哪种方法?参考法则:如果视图没有子视图,就用代码创建:如果有子视图,就通过XIB文件创建. 2.创建视图的时候,视图控制器会调用lo ...

  4. Android TCP/IP Socket Test

    TCP/IP协议:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本 ...

  5. swift2.0中文版教程

    有些同学问我要swift的中文版教程,为了节省大家的找资料的时间,我就把我网上下载的PDF放到这里共享好了. 点击链接或者右击选择下载文件进行下载:swift2.0中文版教程 在此也感谢翻译者们的贡献 ...

  6. 【vue】[Vue warn]: $attrs is readonly. 只读

    [Vue warn]: $attrs is readonly. 这个问题出现时,我自己都很懵逼,明明是在 data 内声明了一个 state  ,我在页面渲染完成后去改变它,但是一改变就报错,而且是我 ...

  7. 关于JSP和HTML

    工作中,发现非常多同事不清楚JSP与HTML的生命周期.以至于出现"JavaScript为啥不能调用JSTL标签(或EL表达式)?"的笑话问题. 以下以流程图的方式.简单说明一下过 ...

  8. structs2 获得表单数据

    http://blog.csdn.net/crazy_java1234/article/details/52766307

  9. 在元素的装载数量明确的时候HashMap的大小应该如何选择。

    今天看到美团招聘给出了一道小题目,关于HashMap的性能问题.问题如下: java hashmap,如果确定只装载100个元素,new HashMap(?)多少是最佳的,why? 要回答这个问题,首 ...

  10. Jquery学习笔记(6)--jquery中attr和prop的区别【精辟】

    jquery中attr和prop的区别 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很 ...