C++(二十一) — 引用概念及本质
1、引用概念
引用是别名,必须在声明的时候初始化。即:是指一个已定义变量的别名。(一个内存空间,有两个名字都可以操作)
引用:在函数调用时,是变量的别名,不可以单独存在,使用时必须要初始化;
指针:本身有自己的地址,可以单独存在。
2、引用基本举例
引用在交换时的例子:
void myswap01(int a, int b)
{
int c = ;
c = a;
a = b;
b = c;
} void myswap02(int *a, int *b)
{
int c = ;
c = *a;
*a = *b;
*b = c;
} // 引用,变量的别名,指代同一个存储空间
void myswap03(int &a, int &b)
{
int c = ;
c = a;
a = b;
b = c;
} void main()
{
int x = , y = ; myswap01(x, y);
cout << "x= " << x << " y= " << y << endl; myswap02(&x, &y);
cout << "x= " << x << " y= " << y << endl; myswap03(x, y);
cout << "x= " << x <<" y= " << y << endl; system("pause");
}
3、引用本质思考
(1)引用就是别名,指向同一块内存空间。
(2)引用占用字节:int &a,,占用4个字节,就相当于一个指针所占的内存;引用有自己的存储空间,保存地址;
struct teacher
{
int age; //
char & a;//4,,相当于一个指针,占用4个字节
double &b;//
}; void main()
{
cout << sizeof(teacher) << endl;//
system("pause");
}
(3)本质:引用在C++中的内部实现:一个常量指针,所以引用所占内存大小和指针相同;
int& age ——> int* const age
相当于:编译器帮我们取了一个实参地址。
4、引用作为函数返回值
1、函数返回值为引用时,内存空间是必须要存在的(静态变量、全局变量),如果返回的是栈变量(局部变量),会出错,因为局部变量在函数返回时,地址就销毁了,比如下面的错误例子:
int& get2()
{
int a;
a = ;
return a;
}
如果返回的引用值,是静态变量或全局变量,则可以。
关键:看返回的内存空间是不是有效的内存空间。
2、引用作为左值,关键:看返回的内存空间是不是有效的内存空间。
// 返回的是一个值
int get1()
{
int a;
a = ;
return a;
} // 返回的是变量本身
int& get2()
{
static int a =;
a++;
cout << "a:" << a << endl;
return a;
} void main()
{
get2() = ; //
get2(); // system("pause");
}
5、常量引用
int x = ;
// 常量引用,变量只有只读属性,不能通过 y 去改变 x 的值
// 必须要初始化
const int &y = x; // int &m = 11;// 11没有内存地址,所以错误,
const int &z = ; // 此时常量引用可以,编译器分配了内存空间给 Z,保存值:12
C++(二十一) — 引用概念及本质的更多相关文章
- WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
		
原文:WCF技术剖析之二十一:WCF基本异常处理模式[中篇] 通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultExcept ...
 - 转:二十一、详细解析Java中抽象类和接口的区别
		
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
 - 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
		
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...
 - 二十一世纪计算 | John Hopcroft:AI革命
		
编者按:信息革命的浪潮浩浩汤汤,越来越多的人将注意力转向人工智能,想探索它对人类生产生活所产生的可能影响.人工智能的下一步发展将主要来自深度学习,在这个领域中,更多令人兴奋的话题在等待我们探讨:神经网 ...
 - Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services
		
Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services Provisioning Services 是Citrix 出品的一系列虚拟化产品中最核心的一个组件, ...
 - JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符
		
JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...
 - JVM 内部原理(二)— 基本概念之字节码
		
JVM 内部原理(二)- 基本概念之字节码 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Enviro ...
 - (C/C++学习笔记) 二十一. 异常处理
		
二十一. 异常处理 ● 异常的概念 程序的错误通常包括:语法错误.逻辑错误.运行异常. 语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译.连接时由编译器指出. 逻辑错误是指程序能顺利运行 ...
 - 云计算设计模式(二十一)——Sharding分片模式
		
云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...
 
随机推荐
- Python菜鸟之路:Django 分页
			
Django的分页没有多少需要说的,有一点需要关注,在自定制分页功能的时候,需要通过python代码来生成每一页的a标签链接,这个时候需要关注一点:默认情况下,为了安全考虑,防范XSS攻击,Djang ...
 - 解决URL地址中的中文乱码问题的办法
			
解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生 ...
 - 2015-04-14——css3 @media
			
//判断横竖屏 @media screen and (min-aspect-ratio: 13/13) { body {background-color:red;}} //屏幕宽高比,必须是除数形式 ...
 - AwesomePerfCpp 性能优化
			
Contents Talks Articles Sites/Blogs Tools Libraries Books About Talks 2013: Going Native 2013 - Andr ...
 - JS全选checkbox
			
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/ ...
 - sp_who 查看数据库连接数
			
create table #TempTable(spid int,ecid int,statusvarchar(32),loginname varchar(32),hostname varchar(3 ...
 - Python WSGI v1.0 中文版(转)
			
add by zhj: WSGI全称Web Server Gateway Interface,即Web网关接口.其实它并不是OSI七层协议中的协议,它就是一个接口而已,即函数,而WSGI规定了该接口的 ...
 - JDK源代码学习系列05----LinkedList
			
JDK源代码学习系列05----LinkedList 1.LinkedList简单介绍 LinkedList是基于双向 ...
 - POS杂项数据SAP记账程序
			
*&---------------------------------------------------------------------* *& Report ZDQFI_904 ...
 - phpcms使用session的方法
			
phpcms使用session //session开始 必须有下面的代码,否则无效 private function _session_start() { $session_storage = 'se ...