c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用
2. 引用
学习目的:取代C中的指针。
目录
2. 引用
2.1 引用的基本使用方法
2.2 引用注意事项
2.3 引用做函数参数
2.4引用做函数返回值
2.5 引用的本质
2.6 常量引用
相关教程
2.1 引用的基本使用方法
- 作用:给变量起别名。
- 语法:
数据类型 &别名 = 原名
int main() {int a = 10;// 创建引用int& b = a;cout << "a = " << a << endl;cout << "b = " << b << endl << endl;b = 100;cout << "a = " << a << endl;cout << "b = " << b << endl << endl;system("pause");return 0;
}
---------------------------------------------------------------
a = 10
b = 10a = 100
b = 100请按任意键继续. . .
2.2 引用注意事项
- 引用必须初始化。
- 引用在初始化后,不可以改变。
示例:
int a = 10;
int &b = a;1.引用必须要初始化int &b; // 错误的
2.引用一旦初始化后,就不可以更改了&b = c; // 语法错误b = c; // 并不是更改引用,而是赋值操作
2.3 引用做函数参数
- 作用:通过引用参数产生的效果,同按地址传递是一样的。
- 好处:相比指针,引用的语法更清楚简单。
// 值传递
void swap01(int a, int b)
{int temp = a;a = b;b = temp;
}// 地址传递
void swap02(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}// 引用传递
void swap03(int &a, int &b)
{int temp = a;a = b;b = temp;
}int main() {int a = 10,b = 20;cout << "a = " << a << endl;cout << "b = " << b << endl << endl;//swap01(a, b);//swap02(&a, &b);swap03(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl << endl;system("pause");return 0;
}
--------------------------------------------------------------------------
a = 10
b = 20a = 20
b = 10请按任意键继续. . .
2.4引用做函数返回值
- 作用:引用是可以作为函数的返回值存在的。
- 注意:不要返回局部变量的引用。
// 不要返回局部变量的引用。
int& test1()
{int a = 10;return a;
}int main() {int& temp = test1();cout << "temp = " << temp << endl;cout << "temp = " << temp << endl;cout << "temp = " << temp << endl;cout << "temp = " << temp << endl;system("pause");return 0;
}
------------------------------------------------------
temp = 10
temp = 2050341264
temp = 2050341264
temp = 2050341264
请按任意键继续. . .
- 用法:函数的调用可以作为左值。
int& test1()
{static int a = 10; // 静态变量存放于全局区return a;
}int main() {int& temp = test1();cout << "temp = " << temp << endl;cout << "temp = " << temp << endl;test1() = 1000; // 如果函数的返回值是引用,这个函数调用可以作为左值cout << "temp = " << temp << endl;cout << "temp = " << temp << endl;system("pause");return 0;
}
--------------------------------------------------------------------
temp = 10
temp = 10
temp = 1000
temp = 1000
请按任意键继续. . .
2.5 引用的本质
本质:引用的本质在C++内部实现是一个指针常量。
解引用的过程在编译器处理。
2.6 常量引用
- 作用:常量引用主要用来修饰形参,防止误操作。
- 用法:在函数形参列表中,可以加const修饰形参,防止形参改变实参。
int& ref = 10; // 这种写法编译器会报错const int& ref = 10; // 相当于 int temp = 10; const int& ref = temp;
ref = 20; // 编译器会报错。加const后变为只读,不可修改
int showValue(const int& a)
{a += 10; // 这句编译器会报错,常量引用的值不可修改cout << a << endl;return 0;
}
相关教程
- 开发环境搭建:Visual Studio 2019 C++开发环境搭建
- 推荐视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444
- 已投币三连,非常细致的视频教程,感谢up主。
c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用相关推荐
- Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...
- 2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码)
2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码) 1.引用(普通引用) 变量 ...
- C/C++之函数返回值为指针或者是引用时常见错误总结
1.说明 函数如果是指针或则引用的返回,一般全局变量.局部静态变量.局部动态分配内存的变量可以使用作为函数的返回值,局部变量不行,因为局部变量函数调用完会自动销毁内存,这个时候返回的指针或则引用就有问 ...
- C++_引用_引用的基本语法_注意事项_引用做函数参数---C++语言工作笔记031
然后我们再去看看c++中的引用 上面是引用的语法,实际上就是,比如 我有个变量 int a = 10; int &b = a; 我这里,我再去定义一个&b ,这个&b是个引用. ...
- 指针--用指针变量作函数参数的实例(按值调用与模拟按引用调用)、函数指针及其应用
一.用指针变量作函数参数的实例 思考题: 例题:从键盘输入某班学生某门课成绩(每班人数最多不超过40人,具体人数由键盘输入),是分析下列程序是否能实现计算并输出最高分以及相应学号. #include ...
- python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...
https://www.xin3721.com/eschool/python.html typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints ...
- c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const
十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...
- 指针的引用做函数的参数
#include <iostream>using namespace std; // 二级指针的使用 [11/24/2017 Andrew]struct Teacher {char nam ...
- 重新学习c++--理解引用、智能指针、虚函数、模板、容器
最近几年用c和python比较多,上次用c++写程序已经是几年前的事情了.温故而知新,是时候重新学习下c++了. C++可以分成四大块去理解: C c++仍以C为基础,区块blocks.语句state ...
最新文章
- Matlab与线性代数 -- 逆矩阵
- 替换功能replaceAll
- PHP 取302跳转后真实 URL 的两种方法
- Laravel 框架安装
- inotifywait实现目录监控
- camel apache_Apache Camel 3的工作终于开始了
- vue跨域解决及打包
- TI DSP simulator 种类选择
- 交错排列(Alternating Permutation)问题详解
- C++ #define参数问题
- mysql中怎样自动生成代码_MySql之自动生成CRUD代码
- Java实现字符串逆序输出
- 抖音视频怎么去掉抖音的水印?
- 什么是异地双活及应用场景
- 漫反射辐照——并不是很完全的翻译
- eMMC(二)——分区管理
- 在Livemedia的基础上开发自己的流媒体客户端
- 建立基于Open vSwitch的GRE隧道
- 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)
- 创维E900V22C E900V22D 安卓9版本-U盘通刷固件及教程