C++指针作为函数参数的用法(附带实例)
前面我们接触到的函数都是按值传递参数。也就是说,实参传递给函数体后生成的是实参的副本,在函数内改变副本的值并不会影响到实参。
除了按值传递参数,还可以使用指针作为函数参数。
指针作为函数参数时,实参传递给函数体后同样会生成指针变量副本,但副本与原指针指向的是同一块内存区域,因此改版指针副本指向的内容,就会改变原指针指向的内容。
【实例】交换两个变量的值。通过函数重载定义两个 swap() 函数,一个函数的参数是指针变量,另一个函数的参数是整型变量,比较不同传值方式下的交换效果。具体代码如下:
除了按值传递参数,还可以使用指针作为函数参数。
指针作为函数参数时,实参传递给函数体后同样会生成指针变量副本,但副本与原指针指向的是同一块内存区域,因此改版指针副本指向的内容,就会改变原指针指向的内容。
【实例】交换两个变量的值。通过函数重载定义两个 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