【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用
含义
引用不产生副本,只是给原变量起了别名。
对引用变量的操作就是对原变量的操作。基本语法
数据类型 &别名 = 原名
e.g.
int a = 10;
int &b = a; //引用必须要初始化,一旦初始化后不可以更改:因为本指是指针常量,不可以修改指针的指向
可以通过赋值修改:
int main()
{
int a = 10;
int &b = a;
int c = 20;
b = c; //可以赋值,但是不能更改引用
cout << "a" << a << endl;
cout << "b" << b << endl;
system("pause");
}

发现更改了引用b的值之后,a的值也跟着改变了。
对引用变量的操作就是对原变量的操作。
引用作为函数参数
作用:传参让形参修饰实参
优点:简化指针修改实参。
void test01(&a)引用作为函数返回值
#include <iostream>
using namespace std;
//返回局部变量引用
int& test01()
{
int a = 10; //局部变量存放在 栈区
return a;
}
//函数调用可以作为左值,调用完后返回a的引用。
//左值必须为可修改的值
int& test02()
{
static int a = 10; //静态变量,存放在全局区,全局区数据在程序结束后系统释放
return a;
}
int main()
{
// 不能返回局部变量的引用
// int &ref = test01();
// cout << ref << endl;
int &ref2 = test02();
cout << ref2 << endl;
test02() = 1000; //如果函数的返回值是引用,这个函数调用可作为左值,因为引用相当于返回了变量,可以被修改
cout << ref2 << endl;
system("pause");
}
- 引用的本质
在C++内部实现一个指针常量。
指针常量:指针的指向不可以修改,指针指向的地址的内存中的值可以修改。
//发现是引用,转换为 int* const ref = &a;
void func(int& ref)
{
ref = 100; // ref是引用,转换为*ref = 100
}
int main()
{
int a = 10;
//自动转换为 int* const ref = &a; 创建引用相当于创建了一个指针常量:指针的**指向固定**
int& ref = a;
ref = 20; //内部发现ref是引用,自动转换为:*ref = 20;
func(a);
}
- 常量引用
作用:修饰形参,防止误操作
#include <iostream>
using namespace std;
//打印数据函数
void showValue (const int& val)
{
//作用2: 防止误操作
//val = 1000; 报错,不能修改
cout << val << endl;
}
int main()
{
//常量引用
//使用场景:用来修饰形参,防止误操作
//作用1: 直接赋值(常值)
//加上const之后 编译器将代码修改 int temp = 10; const int &ref = temp;
//int& ref = 10; 报错,引用必须引一块合法的内存空间
const int& ref = 10;
//ref = 20; 报错,加入const之后变为只读,不可以修改
int a = 100;
showValue(a);
cout << a << endl;
system("pause");
}
【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用的更多相关文章
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- JS基础语法---函数---介绍、定义、函数参数、返回值
函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...
- Python基础之函数参数与返回值进阶
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...
- javascript函数参数、返回值类型检查
实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.de ...
- 04 python学习笔记-函数、函数参数和返回值(四)
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print(),我们也可以自己创建函数,这叫做用户自定 ...
- Java中能否利用函数参数来返回值
转自https://blog.csdn.net/da_da_xiong/article/details/70039532 我们在写代码时通常会遇到一种情况,就是我们可能希望在一个函数操作完成后返回两个 ...
- c++函数参数或返回值为函数指针
C++中函数指针的形式为:返回值类型 + 参数类型,函数没有值类型,但是却可以声明函数的指针,因为函数是可寻址的,存放在内存中的代码段,可以从指针访问. 函数指针可以声明为: void (*pF)(v ...
- ajax中error函数参数与返回值详解 200 300 400 500
201-206:都表示服务器成功处理了请求的状态代码,说明网页可以正常访问. 200:(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. 201:(已创建) 请求成功且服务器已创建 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
随机推荐
- 【JAVA】编程(2)---时间管理
作业要求: 定义一个名为 MyTime 的类,其中私有属性包括天数,时,分,秒:定义一个可以初始化时,分,秒的构造方法,并对初始化数值加以限定,以防出现bug:定义一个方法,可以把第几天,时,分,秒打 ...
- [gym102268E]Expected Value
令$X$为移动次数,答案即$\sum_{i=0}^{\infty}P(X>i)$,后者记作$S_{i}$ 关于$S_{i}$,令$f_{i,j}$表示走了$i$步后位于$j$且未到达过$k$的概 ...
- [atARC080F]Prime Flip
构造一个数组$b_{i}$(初始为0),对于操作$[l_{i},r_{i}]$,令$b_{l_{i}}$和$b_{r_{i}+1}$值异或1,表示$i$和$i-1$的差值发生改变,最终即要求若干个$b ...
- Swift-技巧(八)CVPixelBuffer To CGImage
摘要 Swift 中图像的表现形式不只是 Image,还有更加底层的方式,比如 CVPixelBuffer 像素缓存形式,那么像素缓存转换为可以在应用中展示的 CGImage,就要知道有哪些处理了. ...
- SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解(2)
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续分析上一节提到的 WebHandler,经过将请求封装成 ServerWebExc ...
- THUSC2021 游记
Day -6 - 2459343 请了一天假在家卷 whk,u1s1 星期六为啥要去上学呢(bushi 中午 12:00 左右得知自己有去参加 THUSC 的资格 然后就是一堆待填写的资料和报名表 发 ...
- P3438 [POI2006]ZAB-Frogs
P3438 [POI2006]ZAB-Frogs 给出一个不一样的解法.不需要用到斜率优化等高级算法. 下文记 \(n=w_x,m=w_y\). 首先,答案显然满足可二分性,因此二分答案 \(d\in ...
- [ARC101C] Ribbons on Tree
神仙的容斥题与神仙的树形DP题. 首先搞一个指数级的做法:求总的.能够覆盖每一条边的方案数,通过容斥可以得到\(\text{ans}=\sum\limits_E{(-1)^{|E|}F(E)}\).其 ...
- 实现类似Tab选项卡功能关键代码
//放置显示不同Activity的控件 private LinearLayout mainContentLayout; private LocalActivityManager localActivi ...
- Perl语言编程(大骆驼)
啰嗦几句 Perl的时代已经过去,现在年轻的同事们基本上都在用Python了.但个人认为单就生物信息文本处理而言,Perl语言是绝对够用的.最主要的是,前辈们搭建的流程大多数是Perl写的,因此,如果 ...