原文: https://www.programiz.com/c-programming/c-pointer-functions

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

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

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


示例:按引用调用

  1. #include <stdio.h>
  2. void swap(int *n1, int *n2);
  3. int main()
  4. {
  5. int num1 = 5, num2 = 10;
  6. // address of num1 and num2 is passed
  7. swap( &num1, &num2);
  8. printf("num1 = %d\n", num1);
  9. printf("num2 = %d", num2);
  10. return 0;
  11. }
  12. void swap(int* n1, int* n2)
  13. {
  14. int temp;
  15. temp = *n1;
  16. *n1 = *n2;
  17. *n2 = temp;
  18. }

运行该程序时,输出为:

num1 = 10
num2 = 5

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

指针n1n2在函数定义中接受这些参数。

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

swap()函数中更改* n1* n2时,main()中的num1num2函数也被更改。

swap()函数内部,交换了*n1*n2。 因此,num1num2也被交换。

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

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


示例 2:将指针传递给函数

#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。 由于ptrp指针都具有相同的地址,因此main()中的*p也是 11。