公司动态
C语言函数核心考点全解析
一、函数是什么核心概念函数把一段重复、独立的功能代码封装起来实现一次定义、多次调用生活理解main函数 主流程老板自定义函数 专门干活的员工函数三大好处必考简答题代码复用不用重复写相同代码结构清晰分工明确可读性强便于调试维护改功能只改函数内部二、函数分类1. 库函数系统自带C语言官方提供直接调用需要对应头文件printf / scanfstdio.hstrlen / strcpystring.hsqrt / powmath.h2. 自定义函数自己写根据业务需求自己封装的功能函数是学习重点3. main函数程序唯一入口有且只能有一个系统自动调用不需要手动调用三、自定义函数完整语法重中之重完整四要素返回值类型 函数名 参数列表 函数体返回值类型 函数名(参数列表) { 函数体具体功能代码 return 值; }1. 返回值类型函数执行完返回给主调函数的结果类型int返回整数double返回小数void无返回值最容易考2. 函数名命名规则和变量一致字母、数字、下划线不能数字开头3. 参数列表形参用于接收外部传入的数据相当于“函数的输入”无参数括号写void或空有参数int a, int b4. return 语句结束当前函数带回返回值void函数可以不写return非void函数必须写return否则报错/警告return 后语句永远不执行四、函数三位置定义、声明、调用1. 函数调用运行顺序语法函数名(实参);实参真正传进去的数值/变量真实的数据2. 形参 vs 实参必考区别形参函数定义括号里的变量只在函数内有效属于局部变量实参调用时传入的真实数据参数传递规则个数相同、类型匹配、顺序一致3. 函数声明解决“先调用后定义”报错如果函数写在main后面必须在main前面写声明声明格式只写头部不写函数体末尾加分号int add(int a, int b);作用告诉编译器函数存在提前备案五、函数参数传递机制核心难点1. 值传递普通变量传参传递的是副本函数内部修改不会影响外面变量void change(int x) { x 999; } // main中修改无效2. 地址传递数组/指针传参传递的是地址函数内修改会改变原数据数组传参默认地址传递void printArr(int arr[]) { arr[0] 999; // 修改的是原数组 } 必考总结普通变量值传递 →内部改不动外部数组/指针地址传递 →内部可以改外部六、函数与数组考试最大坑点1. 数组传参本质数组传参自动降级为指针只传首元素地址不传整数组2. 两大致命结论必背函数内部sizeof(数组名) 得不到数组长度数组传参必须手动额外传入长度len3. 数组参数两种等价写法void fun(int arr[]) void fun(int *arr)七、变量作用域与生命周期超级高频考点1. 局部变量定义位置函数内部、代码块{}内部作用域仅当前代码块内存位置栈区初始化默认随机垃圾值生命周期执行完立刻销毁2. 全局变量定义位置所有函数外部作用域整个程序所有函数都能用内存位置静态区初始化默认 0生命周期程序结束才销毁3. 变量同名规则局部优先局部屏蔽全局八、static 静态变量难点考点1. 普通局部变量每次调用函数都会重新创建、重新初始化用完销毁2. static 静态局部变量第一次调用初始化仅执行一次程序期间保留上次的值存放静态区生命周期延长到整个程序默认值 0经典考题统计函数调用次数必用 static九、函数嵌套与递归1. 函数不允许嵌套定义C语言所有函数都是平行独立的不能在函数里面定义函数2. 允许嵌套调用A函数可以调用B函数B可以调用C3. 递归函数自己调用自己递归两要素递归出口 递归公式常见题阶乘、斐波那契、求和十、C99 函数特性考点C89变量必须写在函数开头C99允许函数任意位置定义变量C99支持inline内联函数十一、函数最全易错点总结考前必背void 函数无返回值不用写return非void函数必须有return否则语法错误形参是局部变量函数外无法使用普通变量传参是值传递不改变原值数组传参是地址传递会改变原值数组传参丢失长度必须手动传len函数不能嵌套定义只能嵌套调用static变量只初始化一次值会保留全局变量默认0局部变量默认随机值局部变量屏蔽全局变量