# 通过引用进行 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`相同的值。