C语言函数参数传递:地址与指针实战指南
C语言函数参数传递:地址与指针实战指南
通过清晰示例和专家讲解,掌握在C语言中向函数传递内存地址和指针的技巧。
在C语言中,传递地址而非值可让函数直接操作原始变量。这种称为 指针传递 的技术,对高效代码和跨作用域修改数据至关重要。
示例 1:通过引用交换两个整数
#include <stdio.h>
void swap(int *n1, int *n2);
int main(void) {
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 = *n1;
*n1 = *n2;
*n2 = temp;
}
运行结果:
num1 = 10 num2 = 5
swap() 接收指向原始 num1 和 num2 的指针 n1 和 n2。通过解引用 (*n1 和 *n2),函数交换内存中实际存储的值,因此 main() 能看到更新后的数字。注意 swap() 返回 void,因为它直接修改参数。
示例 2:通过指针增加值
#include <stdio.h>
void addOne(int *ptr) {
(*ptr)++; /* 增加给定地址处的值 */
}
int main(void) {
int i = 10;
int *p = &i;
addOne(p);
printf("%d", *p); /* 打印 11 */
return 0;
}
这里 p 保存 i 的地址。addOne() 接收同一地址,解引用并增加底层值。调用后,*p(即 i)变为 11。
这些示例展示了指针传递的威力:函数可修改其作用域外的变量,实现无需额外复制的高效数据操作。
C语言