📘引用(Reference)

2026-08-14
⭐⭐ GESP 6级

📖概念讲解

引用(Reference)是 C++ 中变量的"别名"。它不是新变量,而是给已有变量起另一个名字。声明时用 & 符号,初始化后不能重新绑定到其他变量。

核心要点:

💡 易混淆:引用(&)vs 指针(*)—— 引用是别名、不能为 null、初始化后不变;指针是地址、可以为 null、可以重新指向。

💻代码示例

1#include <iostream>
2using namespace std;
3
4// 交换两个数:用引用实现"真·交换"
5void swapRef(int &a, int &b) { // a, b 是实参的别名
6 int temp = a; // 暂存 a 的值
7 a = b; // 改 a 就是改实参
8 b = temp; // 同理
9}
10
11// const 引用:只读,不能修改原变量
12void print(const string &s) { // 高效且安全
13 cout << s << endl;
14 // s += "!"; // ❌ 编译报错,const 不允许修改
15}
16
17int main() {
18 int x = 10, y = 20;
19 int &r = x; // r 是 x 的别名,不是拷贝
20 r = 99; // 改 r 就是改 x
21 cout << "x=" << x << ", r=" << r << endl; // 输出 x=99, r=99
22
23 swapRef(x, y); // 通过引用交换 x 和 y
24 cout << "x=" << x << ", y=" << y << endl; // 输出 x=20, y=99
25
26 string msg = "Hello GESP";
27 print(msg); // const 引用,高效传递
28 return 0;
29}
30// 输出: x=99, r=99 / x=20, y=99 / Hello GESP

🧩互动小测

Q1: 下面哪段代码能正确交换 a 和 b 的值?

Q2: const int &r = x; 后,r = 100; 会怎样?

Q3: 引用和指针的关键区别是?

🏋️动手练一练

📝 编程练习

编写函数 bool findMin(const vector<int>& nums, int& result),用 const 引用接收数组(避免拷贝),用引用参数返回最小值。找到返回 true,空数组返回 false。

提示:const 引用传入数组,引用参数做"输出通道"。
参考答案:
#include <iostream>
#include <vector>
using namespace std;

bool findMin(const vector<int>& nums, int& result) {
    if (nums.empty()) return false;  // 空数组特判
    result = nums[0];               // 初始化最小值
    for (int i = 1; i < nums.size(); i++) {
        if (nums[i] < result)       // 找更小的
            result = nums[i];       // 通过引用更新外部变量
    }
    return true;
}

int main() {
    vector<int> v = {5, 3, 8, 1, 4};
    int minVal;
    if (findMin(v, minVal))
        cout << "最小值: " << minVal << endl;  // 输出: 最小值: 1
    return 0;
}

要点:const 引用避免大 vector 拷贝;引用参数让函数可以"返回"多个值;别忘了空数组的边界检查。

📝易错点提醒

学完这个知识点后点一下