💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 通过引用进行 C++ 调用:使用指针【包含示例】 > 原文: [https://www.programiz.com/cpp-programming/pointers-function](https://www.programiz.com/cpp-programming/pointers-function) #### 在本文中,您将学习将指针作为函数的参数传递,并在程序中有效地使用它。 在 [C++ 函数](/cpp-programming/function "C++ Functions")文章中,您了解了有关将参数传递给函数的知识。 因为传递了实际值,所以使用的此方法称为按值传递。 但是,还有另一种方法将参数传递给不传递参数实际值的函数。 而是仅传递对该值的引用。 * * * ## 示例 1:不使用指针传递引用 ```cpp #include <iostream> using namespace std; // Function prototype void swap(int&, int&); int main() { int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "\nAfter swapping" << 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; } ``` **输出** ```cpp Before swapping a = 1 b = 2 After swapping a = 2 b = 1 ``` 在`main()`中,定义了两个整数变量`a`和`b`。 这些整数通过引用传递给函数`swap()`。 编译器可以识别出此引用是通过引用传递的,因为函数定义为`void swap(int& n1, int& n2)`(请在数据类型后注意`&`符号)。 在`swap()`函数中仅接收变量`a`和`b`的引用(地址),并且在变量的原始地址中进行交换。 在`swap()`函数中,`n1`和`n2`是形式参数,实际上分别与变量`a`和`b`相同。 还有另一种使用[指针](/cpp-programming/pointers "C++ Pointers")来完成相同任务的方法。 * * * ## 示例 2:使用指针传递引用 ```cpp #include <iostream> using namespace std; // Function prototype void swap(int*, int*); int main() { int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(&a, &b); cout << "\nAfter swapping" << 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; } ``` 此示例的输出与之前相同。 在这种情况下,变量的地址是在函数调用期间传递的,而不是变量本身。 ```cpp swap(&a, &b); // &a is address of a and &b is address of b ``` 由于传递的是地址而不是值,因此必须使用解引用运算符来访问存储在该地址中的值。 ```cpp void swap(int* n1, int* n2) { ... .. ... } ``` `*n1`和`*n2`分别给出存储在地址`n1`和`n2`中的值。 由于`n1`包含`a`的地址,因此对`*n1`执行的任何操作也会更改`main()`函数中的`a`的值。 类似地,`b`将具有与`*n2`相同的值。