# C 按引用调用：使用指针

> 原文： [https://www.programiz.com/c-programming/c-pointer-functions](https://www.programiz.com/c-programming/c-pointer-functions)

#### 在本教程中，您将借助示例学习将地址作为参数传递给函数。 此技术称为“引用调用”。

在 C 编程中，也可以将地址作为参数传递给函数。

要在函数定义中接受这些地址，我们可以使用指针。 这是因为指针用于存储地址。 让我们举个例子：

* * *

## 示例：按引用调用

```c
#include <stdio.h>
void swap(int *n1, int *n2);

int main()
{
    int num1 = 5, num2 = 10;

    // address of num1 and num2 is passed
    swap( &num1, &num2);

    printf("num1 = %d\n", num1);
    printf("num2 = %d", num2);
    return 0;
}

void swap(int* n1, int* n2)
{
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}
```

运行该程序时，输出为：

```c
num1 = 10
num2 = 5
```

使用`swap(&num1, &num2);`将`num1`和`num2`的地址传递给`swap()`函数。

指针`n1`和`n2`在函数定义中接受这些参数。

```c
void swap(int* n1, int* n2) {
    ... ..
}

```

在`swap()`函数中更改`* n1`和`* n2`时，`main()`中的`num1`和`num2`函数也被更改。

在`swap()`函数内部，交换了`*n1`和`*n2`。 因此，`num1`和`num2`也被交换。

请注意，`swap()`没有返回任何内容。 其返回类型为`void`。

该技术在 C 编程中称为“引用调用”。

* * *

## 示例 2：将指针传递给函数

```c
#include <stdio.h>

void addOne(int* ptr) {
  (*ptr)++; // adding 1 to *ptr
}

int main()
{
  int* p, i = 10;
  p = &i;
  addOne(p);

  printf("%d", *p); // 11
  return 0;
}
```

在此，存储在`p*p`的值最初为 10。

然后，我们将指针`p`传递给`addOne()`函数。`ptr`指针在`addOne()`函数中获取此地址。

在函数内部，我们使用`(*ptr)++;`将`ptr`中存储的值增加了 1。 由于`ptr`和`p`指针都具有相同的地址，因此`main()`中的`*p`也是 11。