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;
}
输出:
num1 = 10
num2 = 5
在 swap(&num1, &num2);
语句中,num1
和 num2
的地址作为参数传递给 swap()
函数。
在函数定义中使用指针 n1
和指针 n2
接受这些参数:
void swap(int* n1, int* n2) {
... ..
}
在 swap()
函数里面, *n1
和 *n2
进行了交换。因此,num1
和 num2
的值也被交换了。
注意 swap()
没有任何返回,它的返回类型是 void
.
示例 2:将指针传递给函数
#include <stdio.h>
void addOne(int* ptr) {
(*ptr)++; // *ptr 加 1
}
int main()
{
int* p, i = 10;
p = &i;
addOne(p);
printf("%d", *p); // 11
return 0;
}
i
的地址赋值给指针 p
,也就是说 *p
的值最初为 10
。
然后我们传递了指针 p
到 addOne()
函数。并在函数内部,将指针指向的地址中的值进行了自加 (*ptr)++;
。因此 main()
函数中的 *p
的值也是 11
。
结论:
指针指向的是变量的地址,赋值的时候也是将变量的地址赋值给指针。因此传递指针,就是传递地址。