在本文中,您将学习将指针作为函数的参数传递,并在程序中有效地使用它。
在C ++函数文章中,您了解了有关将参数传递给函数的知识。因为传递了实际值,所以使用的此方法称为按值传递。
但是,还有另一种方法可以将参数传递给一个函数,在这种方法中不传递参数的实际值。相反,只传递对该值的引用。
#include <iostream> using namespace std; // 函数原型 void swap(int&, int&); int main() { int a = 11, b = 22; cout << "交换之前" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "\n交换之后" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int& n1, int& n2) { int temp; temp = n1; n1 = n2; n2 = temp; }
输出结果
交换之前 a = 11 b = 22 交换之后 a = 22 b = 11
在main()函数中,定义了两个整数变量a和b。这些整数通过引用传递给swap()函数。
编译器可以识别出这是通过引用传递的,因为函数定义是void swap(int& n1, int& n2)(请注意数据类型后的&符号)。
在swap()函数中仅接收变量a和b的引用(地址),并且交换发生在变量的原始地址中。
在swap()函数中,n1和n2是形式参数,实际上分别与变量a和b相同。
还有另一种使用指针完成相同任务的方法。
#include <iostream> using namespace std; // 函数原型 void swap(int*, int*); int main() { int a = 1, b = 2; cout << "交换之前" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(&a, &b); cout << "\n交换之后" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int* n1, int* n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; }
此示例的输出与之前的输出结果相同。
在这种情况下,变量的地址是在函数调用期间传递的,而不是变量本身。
swap(&a, &b); // &a是a的地址,&b是b的地址
由于传递的是地址而不是值,因此必须使用解引用运算符来访问存储在该地址中的值。
void swap(int* n1, int* n2) { ... .. ... }
* n1和* n2分别给出存储在地址n1和n2处的值。
由于n1包含a的地址,因此对* n1所做的任何事情也会改变main()函数中a的值。 类似地,b将具有与* n2相同的值。