C++——引用
目录
举个例子:
引用的基本特性
引用的定义语法如下:
1. 引用必须初始化:
2. 引用是别名:
3. 引用不能为空:
4. 引用不能重新绑定:
引用的使用场景
函数参数传递:
函数返回值:
引用 vs 指针
在 C++ 中,引用是一个非常重要的特性,它允许我们为变量创建一个别名。引用本质上是一个已存在变量的另一个名字,通过引用可以直接操作原始变量,而不需要通过指针的间接访问。引用在函数参数传递、返回值优化等场景中非常有用。
举个例子:
引用是一个变量的别名
-
别名 的意思是“另一个名字”。
-
比如,你有一个朋友叫“张三”,他的小名是“小三”。无论是叫“张三”还是“小三”,都是在指同一个人。
-
在 C++ 中,引用就是给变量起了一个“小名”,通过这个小名可以直接访问原始变量。
int a = 10; // 定义一个变量 a(原始变量),值为 10
int &ref = a; // 定义 ref 是 a 的引用(别名,也就是上面提到“小名”)
-
这里,
ref就是a的别名。 -
无论是操作
a还是操作ref,实际上都是在操作同一个变量。
通过引用可以直接操作原始变量
-
因为引用是变量的别名,所以通过引用可以直接修改原始变量的值。
-
不需要通过指针的间接访问,也不需要拷贝数据。
int a = 10; // 定义一个变量 a,值为 10
int &ref = a; // 定义 ref 是 a 的引用ref = 20; // 通过 ref 修改 a 的值
cout << a; // 输出 20
-
在上面的代码中:
-
ref = 20;这行代码通过引用ref修改了变量a的值。 -
最终,
a的值变成了20。
-
引用和原始变量共享同一块内存
-
引用和原始变量实际上是同一个东西,只是名字不同。
-
它们共享同一块内存地址,因此修改引用就是修改原始变量。
int a = 10; // 定义一个变量 a,值为 10
int &ref = a; // 定义 ref 是 a 的引用cout << &a << endl; // 输出 a 的地址
cout << &ref << endl; // 输出 ref 的地址(和 a 相同)
-
在上面的代码中:
-
&a是变量a的地址。 -
&ref是引用ref的地址。 -
你会发现,
&a和&ref的值是相同的,因为它们指向同一块内存。
-
引用的基本特性
引用的定义语法如下:
数据类型 &引用名 = 变量名;
1. 引用必须初始化:
-
引用在定义时必须初始化,且一旦初始化后,不能再绑定到其他变量。
int a = 10; int &ref = a; // ref 是 a 的引用
-
int &ref:表示ref是一个int类型的引用。 -
= a:表示ref是a的别名。
2. 引用是别名:
-
引用和原始变量共享同一块内存地址,修改引用就是修改原始变量。
int a = 10; int &ref = a; ref = 20; // 修改 ref 就是修改 a cout << a; // 输出 20
3. 引用不能为空:
-
引用必须绑定到一个有效的变量,不能像指针一样指向
nullptr。
4. 引用不能重新绑定:
-
引用一旦初始化后,不能再绑定到其他变量。
int a = 10; int b = 20; int &ref = a; ref = b; // 这是将 b 的值赋给 a,而不是将 ref 重新绑定到 b
引用的使用场景
函数参数传递:
-
引用可以作为函数参数,避免拷贝大对象,同时允许函数修改原始数据。

函数返回值:
-
引用可以作为函数返回值,避免返回值的拷贝。

setMaxData函数:
- 接收两个整数的引用作为参数
- 比较这两个整数
- 返回较大的那个整数的引用(不是值,而是引用本身)
main 函数
-
定义两个整数变量
a(10) 和b(20) -
调用
setMaxData(a, b),这会返回b的引用(因为20 > 10) -
将100赋值给这个返回的引用,实际上就是给
b赋值 -
输出结果:
a仍然是10,b现在是100
引用 vs 指针

