C 语言传递地址和指针
提示
- 向函数传递地址:在C语言中,可以将变量的地址作为参数传递给函数。在函数定义中,使用指针来接收这些地址。
- 地址传递的影响:当通过地址(使用指针)传递变量到函数时,对这些指针变量的任何修改都会影响到原始变量。
- 示例:交换和增加函数:通过传递变量的地址给
swap()
函数来交换两个变量的值,以及通过传递指针给addOne()
函数来增加变量的值。
在C编程中,也可以将地址作为参数传递给函数。
为了在函数定义中接受这些地址,我们可以使用指针。这是因为指针用于存储地址。让我们来看一个例子:
示例:向函数传递地址
#include <stdio.h>
void swap(int *n1, int *n2);
int main()
{
int num1 = 5, num2 = 10;
// 传递num1和num2的地址
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
num1和num2的地址被使用swap(&num1, &num2);
传递给swap()
函数。
在函数定义中 ,指针n1和n2接受这些参数。
void swap(int* n1, int* n2) {
... ..
}
当swap()
函数中的n1和n2被更改时,main()
函数内的num1和num2也会被更改。
在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;
}
这里,初始时p所存储的值*p
是10。
我们接着将指针p传递给了addOne()
函数。在addOne()
函数中,ptr指针获得了这个地址。
在函数内部,我们使用(*ptr)++;
将存储在ptr的值增加了1。由于ptr和p指针都有相同的地址,main()
内的*p
也变成了11。