函数是 C 语言模块化编程的核心能把复杂程序拆成小模块实现代码复用、逻辑清晰。本文系统梳理库函数、自定义函数、形参实参、return、数组传参、嵌套链式访问、声明定义、static/extern附带新手高频易错点吃透函数少走弯路一、函数基础概念C 语言函数完成特定任务的一段独立代码也叫 “子程序”。两大分类库函数C 标准库提供直接用自定义函数自己设计实现特定功能二、库函数2.1 什么是库函数ANSI C 规定标准功能编译器厂商实现常见如printf、scanf、strlen、sqrt、strcmp、malloc2.2 使用三要素知道功能知道参数类型必须包含头文件示例sqrt开平方c运行#include stdio.h #include math.h int main() { double r sqrt(16.0); printf(%lf, r); // 4.000000 return 0; }三、自定义函数重点3.1 语法格式c运行返回值类型 函数名(参数列表) { 函数体; return 返回值; }返回值类型int/char/void等void表示无返回函数名见名知意参数函数的输入函数体具体逻辑return返回结果3.2 示例加法函数c运行int Add(int x, int y) { return x y; }调用c运行int r Add(10, 20);四、形参 和 实参必懂4.1 实参实际参数调用函数时真实传递的值 / 变量必须有确定值c运行Add(a, b); // a、b 是实参4.2 形参形式参数函数定义时的占位变量调用时才被创建实例化函数结束就销毁4.3 核心结论形参是实参的一份临时拷贝修改形参不会影响实参。//这里后期用指针来交换便可以影响实参五、return 语句高频考点return 执行后函数立即结束后面代码不执行返回值类型不匹配会自动隐式转换分支函数必须每个分支都有 return//return只能返回一个值void函数可以写return;或不写不写返回值类型默认是int六、数组做函数参数6.1 重点规则数组传参时形参不创建新数组形参操作的就是实参数组本身一维数组形参可写int arr[]大小可省略必须同时传递数组长度函数内部无法直接计算6.2 示例数组置为 - 1 打印c运行void set_arr(int arr[], int sz) { for(int i0; isz; i) arr[i] -1; } void print_arr(int arr[], int sz) { for(int i0; isz; i) printf(%d , arr[i]); }调用c运行int arr[] {1,2,3,4,5}; int sz sizeof(arr)/sizeof(arr[0]); set_arr(arr, sz); print_arr(arr, sz);七、嵌套调用 链式访问7.1 嵌套调用函数里调用其他函数不能嵌套定义。示例判断月份天数嵌套调用闰年函数c运行int is_leap_year(int y) { return (y%40y%100!0) || (y%4000); } int get_days(int y,int m) { int days[] {0,31,28,31,30,31,30,31,31,30,31,30,31}; if(m2 is_leap_year(y)) return 29; return days[m]; }7.2 链式访问把一个函数返回值作为另一个函数参数。经典面试题c运行printf(%d, printf(%d, printf(%d, 43)));输出4321原因printf返回打印的字符个数。八、函数声明 和 定义8.1 规则先声明后使用声明告诉编译器函数名、返回值、参数定义函数具体实现声明写法c运行int is_leap_year(int y);8.2 多文件规范企业级.h头文件放声明.c源文件放实现plaintextadd.h int Add(int x,int y); add.c int Add(int x,int y) { return xy; } test.c #include add.h九、static 和 extern超级重点9.1 作用域 生命周期作用域哪里能用生命周期什么时候创建、销毁9.2 static 修饰局部变量从栈区 → 静态区生命周期变为整个程序作用域不变多次调用函数值会保留示例c运行void test() { static int i 0; i; printf(%d ,i); } // 调用5次输出1 2 3 4 59.3 static 修饰全局变量全局变量默认外部链接属性static 改为内部链接属性只能在本源文件使用其他文件无法链接9.4 static 修饰函数和修饰全局变量一样只能在本文件使用其他文件无法调用9.5 extern声明外部全局变量 / 函数告诉编译器符号在其他文件十、新手高频易错点血泪总结1. 函数基础错误函数调用没声明 / 没定义函数名拼写错误忘记return导致返回值随机2. 形参实参错误以为改形参能改实参参数类型不匹配3. return 错误分支不全有 returnreturn 后写代码执行不到4. 数组传参错误不传长度函数内用sizeof算长度失败以为形参是新数组结果改了原数组5. 声明定义错误函数定义在调用后面不声明直接用多文件不包含头文件6. static/extern 错误不知道 static 延长局部变量生命周期跨文件用 static 全局变量 / 函数报链接错误十一、总结函数 输入 逻辑 输出形参是实参拷贝数组传参是传首地址会改原数组return 立即结束函数先声明后使用static延长局部变量生命周期、限制全局变量 / 函数作用域模块化多文件 .h 声明、.c 实现