函数与指针函数是加工机器指针是地址。把指针传给函数就像把房间号交给工人让他直接操作房间里的东西而不是搬运整个房间。这样可以节省空间和时间也可以让函数修改调用者的数据。总结来说通过指针调用函数可以让函数直接操作原来的变量而不是复制一份副本。void swap(int *a, int *b) { int temp *a; *a *b; *b temp; }首先从函数名swap开始看它表示交换两个数括号里的int *a, int *b是指针参数说明调用函数时需要传入两个整型变量的地址函数体中*a和*b就是通过指针访问原变量的值。int x 10, y 20; swap(x, y); // 把 x 和 y 的地址传给函数执行过程是x和y把变量的地址传给函数函数通过指针修改内存里的值x 和 y 的值被真正交换一、指针作为函数参数(1) 传值调用Pass by Value函数内部修改的是变量的副本原变量不变。void func(int a) { a 100; } int main() { int x 10; func(x); // x 依然是 10 }(2) 传指针调用Pass by Pointer函数内部可以修改原变量的值。void func(int *p) { *p 100; } int main() { int x 10; func(x); // x 变成 100 }二、指针返回函数函数不仅可以接收指针还可以返回指针。int* getMax(int *a, int *b) { if(*a *b) return a; else return b; }调用时int x 5, y 10; int *p getMax(x, y); printf(%d, *p); // 输出 10这里getMax返回了指向最大值的地址直接操作原变量而不复制。三、重点理解指针与函数结合时要问三个问题指针的类型是什么→int*、char*等指针指向的类型是什么→ 指向的变量类型指针指向哪里→ 栈区、堆区还是全局区例如int x 5; int *p x; // p 指向栈区的 x swap(x, y); // swap 函数操作的是栈区变量的地址 int *q malloc(sizeof(int)); // q 指向堆区理解了这些就可以安全地在函数里修改数据同时避免野指针和内存泄漏。四、注意事项永远不要返回栈区变量的地址否则会产生野指针。int* func() { int a 10; return a; // 错误a 栈区变量 }使用堆区内存时要记得free()防止内存泄漏。静态变量可以安全返回地址因为它存放在静态区生命周期整个程序。int* funcStatic() { static int a 100; return a; // 安全 }以后每遇到函数和指针结合使用都应该问这个指针的类型是什么它指向哪块内存函数调用后原变量会被修改吗重点