引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
引用的语法格式
类型 & 引用变量名(对象名) = 引用实体;
例如:
cpp
int a = 10;
int& b = a;
创建一个整数变量 a,值是 10,创建一个引用 b,是变量 a 的别名。
引用 示例代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a = 10;
int& b = a;
cout << "a的值是:" << a << endl;
cout << "a在内存中的位置是:" << &a << endl;
cout << "b的值是:" << b << endl;
cout << "b在内存中的位置是:" << &b << endl;
return 0;
}
运行结果:
c
a的值是:10
a在内存中的位置是:0x6ffe04
b的值是:10
b在内存中的位置是:0x6ffe04
分析
通过打印 a 跟 b 的地址值,可以发现 a 跟 b 是同一块位置,只是取了个别名而已。
引用的特点
- 引用变量的类型必须与它的实体类型一致(因为取别名要符合引用实体的身份,如果类型不一致则会报错)
警告
c
int a = 10;
char& b = a; //这种是错误写法,a跟b要类型一致
:::
- 引用变量使用必须要进行初始化(不然没有实体都不知道给谁取别名)
警告
int& b; //没有初始化,错误写法
一个变量可以有多个引用(就相当于一个变量有好几个别名,这是可以的)
cpp
int a = 10;
int& b = a;
int& c = a;
这种是没问题的,相当于 a 变量有两个别名,分别是 b 跟 c。
引用与函数的结合使用
- 引用变量作为函数参数
引用变量作为函数参数 示例代码
cpp
#include<bits/stdc++.h>
using namespace std;
void fun(int& c,int& d){
int tmp = c;
c = d;
d = tmp;
}
int main()
{
int a = 10;
int b = 100;
cout << "交换之前:" << endl;
cout << "a的值是:" << a << endl;
cout << "b的值是:" << b << endl;
fun(a,b);
cout << "交换之后:" << endl;
cout << "a的值是:" << a << endl;
cout << "b的值是:" << b << endl;
return 0;
}
运行结果:
c
交换之前:
a的值是:10
b的值是:100
交换之后:
a的值是:100
b的值是:10
分析
函数 func 里的 c 是 a 的别名,d 是 b 的别名,在 fun 函数里面对 c 跟 d 进行交换,实际上就是给 a 跟 b 进行交换。
并且没有额外开辟两个变量的空间,相比较,引用还是比较节约空间的。