跳转到主要内容
模块 3 · 第 2 课(共 2)课程中的8/18~12 min
模块课程(2/2)

按值和引用传递

在 C++ 中,当将参数传递给函数时,有两种主要方法:按值或按引用。

理解这种区别对于程序正确性和性能优化都是关键。

按值传递(副本)

默认情况下,C++ 按值传递参数。这意味着在内存中创建数据的副本。函数内部所做的任何修改都不会影响外部的原始变量:

C++
#include <iostream>

void increment(int n) {
    n++; // Modifies only the local copy
}

int main() {
    int x = 5;
    increment(x);
    std::cout << x << std::endl; // Prints 5, x remains unchanged!
    return 0;
}

通过引用传递 (&)

如果您希望函数能够修改原始变量,或者您想避免复制大对象(如长字符串或向量),则必须使用按引用传递。

通过在参数类型后面添加 & 符号来声明引用:

C++
#include <iostream>

void incrementRef(int& n) {
    n++; // Modifies the original variable directly
}

int main() {
    int x = 5;
    incrementRef(x);
    std::cout << x << std::endl; // Prints 6!
    return 0;
}

参数 int& n 不是副本,而是调用函数时传递的变量 x 的别名(直接引用)。

自己尝试一下

锻炼#cpp.m3.l2.e1
尝试:0加载中...

定义一个名为 doubleNumber 的函数,其返回类型为 void,该函数接受对整数 n 的引用(使用 int& n)并将其值加倍 (n = n * 2)。在 main 中调用它,传递初始化为 10 的变量 val,然后打印 val。

正在加载编辑器...
显示提示

函数签名在类型后面使用“&”字符来指示引用:“void doubleNumber(int& n)”。

3 次尝试后可用的解决方案

锻炼#cpp.m3.l2.e2
尝试:0加载中...

定义一个名为 swap 的函数,它接受两个整数引用 a 和 b (int& a, int& b) 并使用临时变量 temp 交换它们的值。在main中调用它来交换x和y,然后打印它们。

正在加载编辑器...
显示提示

使用`int temp = a; a = b; b = temp;` 交换值。

3 次尝试后可用的解决方案