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++(二十一) — 引用概念及本质的更多相关文章

  1. WCF技术剖析之二十一:WCF基本异常处理模式[中篇]

    原文:WCF技术剖析之二十一:WCF基本异常处理模式[中篇] 通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultExcept ...

  2. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  3. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)

      中介者模式(Mediator)   调度.调停   意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...

  4. 二十一世纪计算 | John Hopcroft:AI革命

    编者按:信息革命的浪潮浩浩汤汤,越来越多的人将注意力转向人工智能,想探索它对人类生产生活所产生的可能影响.人工智能的下一步发展将主要来自深度学习,在这个领域中,更多令人兴奋的话题在等待我们探讨:神经网 ...

  5. Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services

    Citrix 服务器虚拟化之二十一  桌面虚拟化之部署Provisioning Services Provisioning Services 是Citrix 出品的一系列虚拟化产品中最核心的一个组件, ...

  6. JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符

    JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...

  7. JVM 内部原理(二)— 基本概念之字节码

    JVM 内部原理(二)- 基本概念之字节码 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Enviro ...

  8. (C/C++学习笔记) 二十一. 异常处理

    二十一. 异常处理 ● 异常的概念 程序的错误通常包括:语法错误.逻辑错误.运行异常. 语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译.连接时由编译器指出. 逻辑错误是指程序能顺利运行 ...

  9. 云计算设计模式(二十一)——Sharding分片模式

    云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...

随机推荐

  1. eclipse欺骗了我

    Java源文件(.java)和Java的字节码文件(.class)跟 package 是个什么关系? 平时使用 eclipse 的时候,发现 .java 文件目录必须和 package 包名保持一致, ...

  2. Python3_实例汇总

    1.Python数字求和 # -*- codingLuft-8 -*- #Filename: test.py #author by:Leq #用户输入数字 num1 = input("输入第 ...

  3. python通过原生sql查询数据库(共享类库)

    #!/usr/bin/python # -*- coding: UTF-8 -*- """DB共享类库""" # 使用此类,先实例化一个Da ...

  4. JavaScript-4.2函数,变量作用域---ShinePans

    <html> <head> <meta http-equiv="content-type" content="text/html;chars ...

  5. Oracle 11g数据库详解

    常见异常: ORA-14025:不能为实体化视图或实体化视图日志指定PARTITION ORA-14026:PARTITION和CLUSTER子句互相排斥 ORA-14027:仅可以指定一个PARTI ...

  6. python16_day18【Django_Form表单、分页】

    一.表单 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 1.Form类 创建Form类时,主 ...

  7. beego——模板函数

    beego 支持用户定义模板函数,但是必须在 beego.Run() 调用之前,设置如下: func hello(in string)(out string){ out = in + "wo ...

  8. python2.7中的字符编码问题

    0. 写在前面 起因:之前写个数据预处理程序的时候遇到了点问题,用re模块的正则查找方法search时总是找不出来(找错了或者出乱码),于是捣鼓捣鼓. 经过:查资料,做实验,发现用utf8编码的str ...

  9. svn / git SourceTree

    开发使用SourceTree 忽略文件这块老弄错,这次专门博客一下,使用CocoaPods 开发项目, 忽略步骤如下:  忽略文件内容如下 *.xcworkspace xcuserdata *.loc ...

  10. 运行报警告UserWarning: Unknown extension is not supported and will be removed warn(msg)

    运行python代码,出现如下警告: C:\Users\niko\PycharmProjects\python_new\venv\lib\site-packages\openpyxl\reader\w ...