C++_ ‘&‘ 引用详解
Posted 「已注销」
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++_ ‘&‘ 引用详解相关的知识,希望对你有一定的参考价值。
C++_引用详解
文章目录
引用: 引用是对一个变量 或 对象(后期讲解) 取的别名,
当引用初始化为某个变量, 便可以使用该引用名称或变量名称来指向此变量.
1.引用的定义:
定义别名方式:
真名的类型 & 别名 = 真名; // 别名也必须符合命名规则(由数字,字母,下划线组成,且初始字符不能为数字)
int MyVariate = 10; // 初始化变量
int & Var = MyVariate;
// var是MyVariate的别名, 此时便可以使用别名来对变量进行修改
Var = 20;
// 此时MyVariate的值变为20
2.引用的使用:
当引用某个类型的变量之后, 引用的使用与该类型变量的使用相同, 引用可以引用指针类型变量, 结构体类型变量…, 可以给引用的别名引用, 但无实际意义.
3.引用形参:
形参 : 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
实参 : 函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。
实参->形参 : 实参与形参之间是单向传递, 发生函数调用时, 实参会把值传给形参, 但形参的改变不影响实参
引用形参 : 引用形参和指针形参一样, 它们都可以改变实参的值
引用形参代码实现:
#include<iostream>
using namespace std;
// 简单交换函数
void swap(int& a, int& b)
int temp = a;
a = b;
b = temp;
int main()
int n = 1, m = 2;
swap(m, n);
printf("%d %d", m, n); // 此时n等于2, m等于1
return 0;
??引用形参为什么可以改变实参的内容_关于形参内部表示形式:
关于内存4区:
// 大佬写的: https://www.cnblogs.com/WindSun/p/11328820.html
// 菜鸡写的: https://blog.csdn.net/zhuiyizhifengfu/article/details/113863723?spm=1001.2014.3001.5501//
4. 引用与指针对比:
当引用作为函数参数时, 与指针作为函数参数效果相同, 但引用不会产生指向对象的副本,节省时间和空间
理论来讲: 引用是一个别名,不占用内存(并不确切) 指针是一个变量, 一般占用**4字节(与编译环境也有关)**来存储地址
引用在定义时就被初始化, 引用的对象不能改变, 而指针的指向可以更改, 像const常量指针
引用的变量在定义前必须初始化, 指针不需要, 并且指针还可以指向空地址;
引用是直接访问,指针是间接访问
指针有多级指针, 但引用没有多级引用!
’&’ 与 ‘*’: (都有三种用法)
* 乘 (双目:左右两边有操作数) 定义指针(左边带类型) 解引用 (单目 : 右边有操作数)
& 位与 (双目: 左右两边有操作数) 定义引用名(左边带类型) 取地址 (单目 : 右边有操作数)
5.别名在内存中如何体现
回到刚刚的问题, 引用是否占用内存
#include<iostream>
using namespace std;
struct xxx
double& ref;
;
int main()
printf("%d\\t%d\\t%d\\n", sizeof(double), sizeof(xxx));
当我们在 VS2019 使用上面的代码测试结果时可以发现别名是占用内存的(4 byte)
个人比较倾向的观点: 引用是一种概念, 抽象的定义, 便于程序员使用, 接口的实现由编译器决定.
但在各种编译器的汇编分析过后, 实现都是占用内存的, 基本都是4字节与指针相同
!!!下面的链接建议查看, 个人认为很有意义
参考文献:https://www.cnblogs.com/gxcdream/p/4805612.html
https://www.cnblogs.com/ronny/p/3662556.html
内容不够全面或不详细地方欢迎提出
以上是关于C++_ ‘&‘ 引用详解的主要内容,如果未能解决你的问题,请参考以下文章
python web框架企业实战详解(第六期)第二课时-pickle&__eq__