Menu
CoddyTech

指针作为参数

Coddy C++ 指针 课程的第 7 课,共 14 课。

编程时广泛使用函数。我们用函数作为工具,多次完成某项任务;即使不需要多次执行,也至少可以用它来整理代码,让代码分开。

向函数传递值时,我们在函数中操作的是原始值的副本。这时,把值作为指针传递给函数就很有用。

void swap(int x, int y) {
    int temp = x;
    x = y;
    y = temp;
    cout << x << " " << y << endl;
}

int main() {
    int a = 10, b = 20;
    cout << a << " " << b << endl;
    swap(a, b);
    cout << a << " " << b;
}
Output:
10 20
20 10
10 20

你可以看到,最初的值是正常的。将它们传递给函数时,会创建原始值的副本,副本的值会互换,我们打印出互换后的值。最后可以看到,调用 main 函数中的函数后,结果并不会永久保留,值仍然是原来的值。使用指针可以解决这个问题。

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
    cout << *x << " " << *y << endl;
}

int main() {
    int a = 10, b = 20;
    cout << a << " " << b << endl;
    swap(&a, &b);
    cout << a << " " << b;
}
Output:
10 20
20 10
20 10

问题解决了。现在,我们传递的不是值,而是值所在位置的地址。作为参数,函数接收保存这些地址的指针。我们创建一个整数 temp,它获取从 x 解引用得到的值。地址 x 中的值(它与 main() 函数中 a 的地址相同)会被改为 y 的值(即 b 的地址中原来的值),最后,对 y 解引用后得到的值会赋给 temp。因为我们修改的是给定地址中的值,而不是给定的值,所以这种修改会永久保留。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

完成函数 Calculator,永久更改变量 large 和 small 的值:用 large 减去 large 与 small 的差,同时让 small 乘以自身。

输入
5 3

输出
5 3
3 9

说明
5 与 3 的差是 2,用 5 减去这个差,得到 5 - 2 = 3;而 3 乘以自身得到 9

注意:不要编写 main() 函数

亲手试试

#include <iostream>

using namespace std;

void Calculator(// 传入参数:large & small) {
    // 在这里编写计算代码
}


// 不要编写 main() 函数

C++ 指针中的所有课

自己练习: C++ 在线编译器