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 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用相关推荐

  1. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

  2. 2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码)

    2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码) 1.引用(普通引用) 变量 ...

  3. C/C++之函数返回值为指针或者是引用时常见错误总结

    1.说明 函数如果是指针或则引用的返回,一般全局变量.局部静态变量.局部动态分配内存的变量可以使用作为函数的返回值,局部变量不行,因为局部变量函数调用完会自动销毁内存,这个时候返回的指针或则引用就有问 ...

  4. C++_引用_引用的基本语法_注意事项_引用做函数参数---C++语言工作笔记031

    然后我们再去看看c++中的引用 上面是引用的语法,实际上就是,比如 我有个变量 int a = 10; int &b = a; 我这里,我再去定义一个&b ,这个&b是个引用. ...

  5. 指针--用指针变量作函数参数的实例(按值调用与模拟按引用调用)、函数指针及其应用

    一.用指针变量作函数参数的实例 思考题: 例题:从键盘输入某班学生某门课成绩(每班人数最多不超过40人,具体人数由键盘输入),是分析下列程序是否能实现计算并输出最高分以及相应学号. #include ...

  6. python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/python.html typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints ...

  7. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const

    十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...

  8. 指针的引用做函数的参数

    #include <iostream>using namespace std; // 二级指针的使用 [11/24/2017 Andrew]struct Teacher {char nam ...

  9. 重新学习c++--理解引用、智能指针、虚函数、模板、容器

    最近几年用c和python比较多,上次用c++写程序已经是几年前的事情了.温故而知新,是时候重新学习下c++了. C++可以分成四大块去理解: C c++仍以C为基础,区块blocks.语句state ...

最新文章

  1. Matlab与线性代数 -- 逆矩阵
  2. 替换功能replaceAll
  3. PHP 取302跳转后真实 URL 的两种方法
  4. Laravel 框架安装
  5. inotifywait实现目录监控
  6. camel apache_Apache Camel 3的工作终于开始了
  7. vue跨域解决及打包
  8. TI DSP simulator 种类选择
  9. 交错排列(Alternating Permutation)问题详解
  10. C++ #define参数问题
  11. mysql中怎样自动生成代码_MySql之自动生成CRUD代码
  12. Java实现字符串逆序输出
  13. 抖音视频怎么去掉抖音的水印?
  14. 什么是异地双活及应用场景
  15. 漫反射辐照——并不是很完全的翻译
  16. eMMC(二)——分区管理
  17. 在Livemedia的基础上开发自己的流媒体客户端
  18. 建立基于Open vSwitch的GRE隧道
  19. 9.4 Python图像处理之图像数学形态学-基于灰度形态学的应用(形态梯度、形态平滑、高帽变换、低帽变换)
  20. 创维E900V22C E900V22D 安卓9版本-U盘通刷固件及教程

热门文章

  1. android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码...
  2. 数据结构-堆 C与C++的实现
  3. python 抓取搜狗微信出现的问题,求大神解决
  4. 寄存器和立即数和内存单元
  5. stm32 GPIO
  6. 数据结构复习之【线性表】
  7. 【Spring 持久层】Spring 事务开发、事务属性详解
  8. 软件测试学习指南(更新中)
  9. 一张图看懂VnTrader的数据流
  10. 触发效果当容器的可见性改变时