首页 > 编程笔记 > C++笔记 阅读:3

C++指针作为函数参数的用法(附带实例)

前面我们接触到的函数都是按值传递参数。也就是说,实参传递给函数体后生成的是实参的副本,在函数内改变副本的值并不会影响到实参。

除了按值传递参数,还可以使用指针作为函数参数。

指针作为函数参数时,实参传递给函数体后同样会生成指针变量副本,但副本与原指针指向的是同一块内存区域,因此改版指针副本指向的内容,就会改变原指针指向的内容。

【实例】交换两个变量的值。通过函数重载定义两个 swap() 函数,一个函数的参数是指针变量,另一个函数的参数是整型变量,比较不同传值方式下的交换效果。具体代码如下:
#include <iostream>
using namespace std;

void swap(int *a, int *b) // 该 swap() 函数交换两个指针变量 a、b(指针传递)
{
    int tmp; // 通过临时变量 tmp 交换 a、b 指向地址内的值
    tmp = *a;
    *a = *b;
    *b = tmp;
}

void swap(int a, int b) // 该 swap() 函数交换两个整型变量 a、b(值传递)
{
    int tmp; // 通过临时变量 tmp 交换 a、b 的值
    tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int x, y; // 定义两个整型指针
    cout << "input two number " << endl; // 输入两个数
    cin >> x; // 给 x、y 赋值
    cin >> y;
    int *p_x, *p_y; // 两个指针分别指向 x、y 的地址
    p_x = &x;
    p_y = &y;
    cout << "按指针传递参数交换" << endl; // 调用参数列表都为指针的 swap() 函数
    swap(p_x, p_y);
    cout << "x=" << x << endl;
    cout << "y=" << y << endl;
    cout << "按值传递参数交换" << endl; // 调用参数列表都为整型变量的 swap() 函数
    swap(x, y);
    cout << "x=" << x << endl;
    cout << "y=" << y << endl;
}
程序运行结果为:

input two number
按指针传递参数交换
x=4198576
y=0
按值传递参数交换
x=4198576
y=0

可以看出,使用指针作为函数参数时实现了 x、y 的交换,而普通变量作为函数参数时只是交换了 x 与 y 的副本。

相关文章