IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C |C++引用 -> 正文阅读

[C++知识库]C |C++引用

C/C++中的引用

一、什么是引用

引用(reference)是给对象起了另一个名字,引用类型引用(refers to)了另外一种类型。声明引用的格式为数据类型 & 变量名。

这里的**‘&’**一定要与取地址操作符区分开,当‘&’放置在一个已定义的变量前面时,它才是对这个变量进行取地址操作,这时’&'号前面并没有数据类型

//'&'是取地址操作符
int main(){
	int i = 10;//定义一个int变量
    int *p  = &i;//这个'&'是取地址符,取出来的地址存放在指针p中
    int &ref = i;//这个'&'是引用标识符
    return 0;
}

那什么是引用呢,引用相当于是给一个已经存在的对象取别名

一般在对变量初始化的时候,初始值会被拷贝到新创建的变量中。但是在定义引用的时候,程序会把引用和它的初始值绑定(bind)在一起,而不是将初始值拷贝给引用。并且当引用的初始化完成时,引用将和它的初始值对象一直绑定在一起,引用和指针不同,指针可以在自己的生命周期中多次更改所指向的对象(因为它内部存储的是对象的地址,只要改变指针存储的地址值,就可以改变指针所指向的对象),但是引用从始至终只能和一个对象绑定,也正因如此,引用必须进行初始化

二、引用的定义

引用并非是一个对象,它只是为一个已经存在的对象所起的另外一个名字(别名)。因此在定义引用后,对引用所做的一切操作其实都是在它所绑定的对象身上所进行的。

允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号’&'开头

int main(){
	int i1 = 10, i2 = 20;//i1和i2都是int类型的对象
    int &r1 = i1, &r2 = i2;//在同一个语句中定义两个引用,r1是i1的引用,r2是i2的引用
    int i3 = 30, &r3 = i3;//必须要先创建对象再定义它的引用,因为引用只会和一个对象进行绑定,所以引用必须要进行初始化
    
    int &test1 = 10//错误,引用类型的初始值必须是一个对象
    
    double d = 3.14;
    int &test2 = d;//错误,引用的必须是自己对应类型的对象,这里只能引用int对象
    return 0;
}

三、通过引用进行修改

当定义引用之后,该引用与原对象形成绑定,成为了原对象的别名,就像是给对象取了个小名,不论用哪个”名称“进行操作,都是在这一个对象身上进行的操作。

int main(){
	int i = 10;
    int &ref = i;
    ref = 20;//ref是i的别名,这里等价于i = 20;
    cout<<i<<endl;//输出结果是20
    return 0;
}

上面的代码表示,将int类型的引用与int类型的对象i进行了绑定,对引用进行修改,其实就是对对象i进行了修改。

四、引用的作用

那么引用到底有什么作用呢?引用最重要的作用就是在函数处作为形参,进行引用传参。因为对于引用的操作实际上作用在引用所引的对象身上的,那我们就可以利用这个性质在设计函数时将形参设置为引用形参。

先设想一下这样的情景,假如我们需要对一个存放着随机数字的数组进行升序排序,如果使用传值传参的方式将整个数组传递给排序函数,系统首先会在排序函数的栈帧中创建一个临时的数组,将原数组中的数据存放在临时数组中,在这个临时数组中完成排序操作之后,再将这个数组中的顺序拷贝回原来的数组中。除去排序所需要的时间,这两次额外的拷贝操作都是没有意义的。如果我们在这里使用引用传参,将形参认为是原数组的一个别名,这样我们对形参的一系列操作实际上就都是在原来的数组上进行的操作了!那我们只需要对它进行排序就可以完成任务。

因此我们在设计函数的时候应该尽量考虑使用引用传参,这样可以避免传值传参方式临时变量的拷贝带来的额外消耗。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:58:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:47:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码