C++引用
前言
这一节内容可能会涉及到一些之前所学习的相关知识,如果你还有不明白的,可以去温习一下之前所学C++基础教程
C++引用
什么是引用?
在 C++ 中,引用 就是变量的另一个名字(别名)。
可以把它理解成一个“昵称”:通过这个昵称,和直接用变量名字效果是一样的,操作的都是同一个数据。
一旦给变量起了这个“昵称”,就不能再改了,引用会一直绑定在这个变量上。
引用与指针的区别
虽然引用和指针都能用来间接访问变量的内容,但它们有以下重要区别:
引用必须合法:
- 引用在创建时,必须绑定到一个有效的变量。
- 指针可以为空(指向
NULL),或者在以后指向其他变量。
绑定不可更改:
- 引用一旦和某个变量绑定,就不能改为绑定其他变量。
- 指针可以随时指向其他变量。
必须初始化:
- 引用在创建时,必须立刻绑定到某个变量。
- 指针可以在创建时不赋值,稍后再初始化。
如何创建引用?
想象变量是贴在内存位置上的标签,引用就是这个标签的第二个名字。
用法很简单,直接用符号 & 创建一个引用。例如:
1 | int i = 17; // 定义一个变量 i |
这里:
r是变量i的引用。- 无论是用
i还是用r,操作的都是同一个数据。
一个完整例子
来看下面的代码:
1 |
|
运行结果:
1 | Value of i: 5 |
解释
int& r = i;- 这里
r是变量i的别名。之后,无论是通过r还是通过i修改值,结果都是一样的,因为它们指向同一块内存。
- 这里
double& s = d;- 这里
s是变量d的别名,类似上面。
- 这里
总结:引用就是变量的另一个名字,引用名和变量名操作的是同一个值。
引用的两个重要用法
引用作为函数参数
- 在函数参数中使用引用,可以让函数直接操作传入的变量,而不是创建一个副本。
- 这种方法既高效,又可以避免不必要的数据拷贝。
例子:
1
2
3
4
5
6
7
8
9
10
11
12void swap(int& x, int& y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 5, b = 10;
swap(a, b); // 交换 a 和 b 的值
cout << "a: " << a << ", b: " << b << endl; // 输出 a: 10, b: 5
return 0;
}解释:
swap函数的参数是引用,因此可以直接修改a和b的值,而不需要返回值。
引用作为函数返回值
- 可以从函数中返回一个引用,这样可以直接操作返回的值,而不需要拷贝。
例子:
1
2
3
4
5
6
7
8
9
10int& getReference(int arr[], int index) {
return arr[index]; // 返回数组元素的引用
}
int main() {
int numbers[3] = {10, 20, 30};
getReference(numbers, 1) = 50; // 修改数组的第二个元素
cout << numbers[1] << endl; // 输出 50
return 0;
}解释:
getReference返回的是数组元素的引用,因此可以直接修改数组内容,而不需要拷贝数据。
小总结
什么是引用?
引用是变量的另一个名字(昵称),操作引用就等于操作变量本身。引用有什么用?
- 减少不必要的数据拷贝,提高效率。
- 让代码更简洁,比如用在函数参数或返回值中。
引用和指针的区别?
- 引用更安全,因为它不能是空引用,且绑定后不能改变。
- 指针更灵活,因为它可以为空,也可以随时指向其他变量。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Matou🚢!
评论








