📜  C Pass地址和指针

📅  最后修改于: 2020-10-04 12:21:53             🧑  作者: Mango

在本教程中,您将学习通过示例将地址和指针作为参数传递给函数的方法。

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

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


示例:将地址传递给函数

#include 
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;
}

运行该程序时,输出为:

num1 = 10
num2 = 5

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

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

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

当在swap() 函数内更改* n1* n2时main() 函数内的num1num2也将更改。

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

注意, swap()不返回任何东西。其返回类型为void


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

#include 

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