c++新特性---引用变量
一、定义
引用变量是已定义变量的别名,如将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++新特性---引用变量的更多相关文章
- List集合及新特性引用
ArrayList就是动态数组,也是一个对象. 创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域. 1.ArrayList是用数组实现的,这个数组的内存是连续的,不存在 ...
- java基础学习总结三(jdk7新特性、变量(局部变量和成员变量)、常量以及运算符)
一:jdk7新特性 可以表示二进制数值,以0b开头,中间可以使用下划线_分隔符.如下: @Test /** * 测试jdk新特性 */ public void testJdk7(){ int a=0b ...
- C++11 新特性总结
前言 转载请注明出处,感谢! C++11 的新特性 1 变量和基本类型 1.1 long long 类型 扩展精度浮点数,10位有效数字 1.2 列表初始化 初始化的几种不同形式,其中用花括号来初始化 ...
- 前端学习笔记 --ES6新特性
前言 这篇博客是我在b站进行学习es6课程时的笔记总结与补充. 此处贴出up主的教程视频地址:深入解读ES6系列(全18讲) 1.ES6学习之路 1.1 ES6新特性 1. 变量 2. 函数 3. 数 ...
- 【转】C++11 标准新特性: 右值引用与转移语义
VS2013出来了,对于C++来说,最大的改变莫过于对于C++11新特性的支持,在网上搜了一下C++11的介绍,发现这篇文章非常不错,分享给大家同时自己作为存档. 原文地址:http://www.ib ...
- C++11新特性:右值引用和转移构造函数
问题背景 #include <iostream> using namespace std; vector<int> doubleValues (const vector< ...
- C++11 标准新特性: 右值引用与转移语义
文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) ...
- 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用
一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...
- jdk1.8新特性之方法引用
方法引用其实就是方法调用,符号是两个冒号::来表示,左边是对象或类,右边是方法.它其实就是lambda表达式的进一步简化.如果不使用lambda表达式,那么也就没必要用方法引用了.啥是lambda,参 ...
随机推荐
- 【windows】使用键盘代替鼠标的快捷键
键盘代替鼠标右键 使用上述键可以代替右键
- JMX 学习
http://blog.csdn.net/qiao000_000/article/category/763467
- vue TypeError: Cannot read property 'length' of undefined 问题解决思路
上图中是我在接手一个项目的时候,出现的一个关于数组的 bug,但是从上图来看,其实报错是不清楚的,只能从报错信息上看出来是 /src/page/waybill/waybill_form.vue 这个 ...
- 教程:VS2010 之TFS入门指南(转载)
[原文发表地址] Tutorial: Getting Started with TFS in VS2010 [原文发表时间] Wednesday, October 21, 2009 1:00 PM 本 ...
- Spring Boot(二):@SpringBootApplication注解理解
@SpringBootApplication包含三个有用的注解,包括 @SpringBootConfiguration:看源码其实就是@Configuration,表示当前类是一个配置类,就像xml配 ...
- 从零開始学android<ScrollView滚动视图.十八.>
因为手机屏幕的高度有限.所以假设面对组件要显示多组信息的时候,ScrollView视图(滚动视图)能够有效的安排这些组件,浏览时能够自己主动的进行滚屏的操作. android.widget.Scrol ...
- 强大的响应式jQuery消息通知框和信息提示框插件
lobibox是一款功能很强大的jQuery消息通知框和信息提示框插件.这个插件分为两个部分:消息通知框和信息提示框.它能很好的结合Bootstrap使用. 信息提示框 lobibox的信息提示框能够 ...
- [svc]jdk1.7.0_13(系列)下载url
蛋疼了,这个版本,找了老半天没找到 最后是同事找到的 http://download.oracle.com/otn/java/jdk/7u13-b20/jdk-7u13-linux-x64.tar.g ...
- Eclipse Jetty Integration
http://eclipse-jetty.sourceforge.net/ Introduction Eclipse Jetty Integration provides a launch confi ...
- flex 伸缩盒子
flex 的学习地址: http://caibaojian.com/demo/flexbox/align-content.html