C++自学笔记——指针在函数参数中的应用

发布于:2025-04-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

指针在函数参数中的应用

我们在上一篇文章有提到过,C++需要指针来操纵内存地址来管理数据,那么我们在函数中是如何使用指针来改变实参的值呢?
如果我们相求两个数a和b的和和积,那么我们先试着用最简单的形式写一下看看:

#include <iostream>
using namespace std;

//--- 把 x 与 y 的和与积赋给 *sum 与 *mul ---
void sum_mul(int x, int y, int sum, int mul)
{
    sum = x + y;       // 把 x 与 y 的和赋给 sum
    mul = x * y;       // 把 x 与 y 的积赋给 mul
}

int main()
{
    int a, b;
    int he = 0, ji = 0;

    cout << "整数 a:";   cin >> a;
    cout << "整数 b:";   cin >> b;

    sum_mul(a, b, he, ji);  // 计算 a 与 b 的和与积

    cout << "和为 " << he << "。" << endl;
    cout << "积为 " << ji << "。" << endl;
}

在这个例子中,函数参数是按值传递的,这意味着函数内部对参数的修改不会影响到主函数中的变量。如果主函数中调用 sum_mul (a, b, he, ji),那么 sum 和 mul 只是 he 和 ji 的副本,函数内部对它们的修改不会改变主函数中的 he 和 ji。因此,这个函数无法正确实现预期功能。
如果我们使用指针来做实现这个功能呢?

#include <iostream>
using namespace std;

//--- 把 x 与 y 的和与积赋给 *sum 与 *mul ---
void sum_mul(int x, int y, int* sum, int* mul)
{
    *sum = x + y;      // 把 x 与 y 的和赋给 *sum
    *mul = x * y;      // 把 x 与 y 的积赋给 *mul
}

int main()
{
    int a, b;
    int he = 0, ji = 0;

    cout << "整数 a:";   cin >> a;
    cout << "整数 b:";   cin >> b;

    sum_mul(a, b, &he, &ji);  // 计算 a 与 b 的和与积

    cout << "和为 " << he << "。" << endl;
    cout << "积为 " << ji << "。" << endl;
}

通过解引用操作符(指针符号) *,可以访问指针指向的内存地址中的值。例如,*sum = x + y 表示将 x + y 的结果存储到 sum 指向的内存地址中。主函数调用的时候,用 sum_mul(a, b, &he, &ji) 时,&he 和 &ji 分别是变量 he 和 ji 的内存地址。
函数内部通过指针修改了这些内存地址中的值,因此主函数中的 he 和 ji 会被正确更新。
我们看一下这里函数的参数是怎样传递的?
值的传递
在这里注意看绿色框中的数据,我们传递的是变量he和ji的地址212和216,而不he和ji的值。

为什么使用指针?

当需要通过函数修改主函数变量的值的时候,指针是常用的方法。指针允许函数直接修改主函数中的变量,而不需要返回值。