指针与函数参数
约 365 字大约 1 分钟
2025-05-25
传值 vs 传引用
在 C 语言中,函数参数默认是传值(pass by value)的。这意味着函数内对参数的修改不会影响原变量。
错误写法:传值
#include <stdio.h>
void Increment(int a) {
a = a + 1; // 只修改了拷贝,原变量不受影响
}
int main(void) {
int a = 10;
Increment(a);
printf("调用函数之后 a = %d\n", a); // 输出: 10(未改变)
return 0;
}正确写法:传引用(通过指针)
#include <stdio.h>
int Interment(int* p) {
*p = *p + 1; // 通过指针修改原变量
}
int main(void) {
int a = 10;
int* p = &a;
Interment(p);
printf("调用函数之后 a = %d\n", a); // 输出: 11
return 0;
}关键理解
| 传值 | 传引用(指针) |
|---|---|
| 函数内修改不影响原变量 | 函数内修改影响原变量 |
| 需要拷贝整个数据(开销大) | 只拷贝指针(8 字节,开销小) |
| 适用于简单类型、无需修改的场景 | 适用于大型数据或需要修改的场景 |
重要
很多语言(包括 C、Java)在调用函数时,函数会在栈中开辟新的空间。函数运行结束后该空间被释放,回到 main 函数继续执行。因此,如果不通过指针传递,函数内的修改不会保留到外层。
代码文件对照
| 文件名 | 对应内容 |
|---|---|
| pointer05.c | 传值错误写法与传引用正确写法对比 |
