🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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。