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++引用用法入门

引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。类似与Window的快捷方式或者人的绰号。
例子:

int main() {
    int a = 99;
    int &r = a;
    cout << a << ", " << r << endl; //输出同一数据99
    cout << &a << ", " << &r << endl; //输出同一地址0x28ff44
    return 0;
}

注意:引用在定义时需要添加&,在使用时不能添加&,使用时添加&表示取地址。引用必须在定义的同时初始化,并且不能引用其它数据。
由于引用和原始变量都指向同一地址,故可以通过引用修改原始变量的数据:

int main() {
    int a = 99;
    int &r = a;
    r = 47;
    cout << a << ", " << r << endl;// 同时输出47
    return 0;
}

如果不希望引用会修改原始的数据,则可添加const限制,如:

int const &r = a; // 只能使用数据,不能修改数据

二、C++引用作为函数参数

在声明定义函数的时候,将函数的形参指定为引用的形式,则在调用函数时,形参和实参都指向同一个地址,从而可以在函数内部影响函数外部数据的效果。

//直接传递参数内容
void swap1(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}
//传递指针
void swap2(int *p1, int *p2) {
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
//按引用传参
void swap3(int &r1, int &r2) {
    int temp = r1;
    r1 = r2;
    r2 = temp;
}
int main() {
    int num1 = 10, num2 = 20;
    cout << num1 << " " << num2 << endl; //num1=10, num2=20
	int num3 = 10, num4 = 20;
    swap2(&num3, &num4);
    cout << num3 << " " << num4 << endl; //num3=20, num4=10
	int num5=10, num6 = 20;
    swap3(num5, num6);
    cout << num5 << " " << num6 << endl; //num5=20,num6=10
    return 0;
}

可以发现,按引用传参的方式更加直观,在C++中,鼓励使用引用

三、C++引用作为函数返回值

引用除了可以作为函数形参,还可以作为函数返回值:

int &plus10(int &r) {
    r += 10;
    return r;
}
int main() {
    int num1 = 10;
    int num2 = plus10(num1);
    cout << num1 << " " << num2 << endl; // 输出20 20
    return 0;
}

注意:不能返回局部数据(局部变量、局部对象、局部数组等)的引用,因为函数调用完局部变量(存储在栈上)会被销毁,下次使用时数据就不一定在了。

int &plus10(int &r) {
    int m = r + 10;
    return m;  //返回局部数据的引用
}
int main() {
    int num1 = 10;
    int num2 = plus10(num1);
    cout << num2 << endl; //输出20
    int &num3 = plus10(num1);
    int &num4 = plus10(num3);
    cout << num3 << " " << num4 << endl; //输出-858993450 -858993450
    return 0;
}

四、C++引用的本质,与指针的区别

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:50:34  更:2022-03-03 15:56:36 
 
开发: 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 4:37:23-

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