C语言 函数
1. 函数作用降低程序耦合性代码关联度消除重复代码程序模块化提高代码复用性。2. 函数定义语法返回值类型 函数名(形参列表) { 函数体; }返回值int/char/float 等基础类型、构造类型、voidvoid代表无返回值。函数名遵循标识符命名规则建议见名知意动宾格式get_max_val、print_star。形参列表数据类型 形参名, 数据类型 形参名...是函数执行需要的外部条件。3. 函数调用语法函数名(实参列表);实参个数、数据类型必须和形参匹配兼容也可实参与形参名称可相同、可不同函数不调用则不执行调用几次执行几次函数调用整体是表达式结果为函数返回值非void函数必须写return否则返回随机值void可省略return或写return;直接结束函数。概念区分主调函数调用其他函数的函数如main被调函数被别的函数调用的函数。4. 函数声明使用场景被调函数定义写在主调函数后方编译器会报隐式声明警告多文件项目让其他文件能够调用本文件函数。 语法返回值类型 函数名(形参列表);5. 函数调用底层流程调用时会执行保护现场与恢复现场保护现场保存调用指令的下一条指令地址到栈恢复现场函数执行完毕从栈取出地址CPU 回到调用处继续执行。6. 函数传参值传递传参本质实参把数据拷贝一份给形参实参、形参拥有独立内存空间特性被调函数内修改形参不会影响主函数原始变量传参顺序实参自右向左求值传递。7. 函数递归调用递归函数直接 / 间接调用自身本质等价于循环。 核心要求必须设置递归出口否则无限递归栈溢出 缺点相比普通循环栈内存开销更大。 典型练习递归求 n 的阶乘递归求斐波那契数列第 n 项1,1,2,3,5,8...。8. 函数与一维整形数组1数组传参写法// 形参两种写法等价 void print_array(int a[], int len); void print_array(int a[100], int len);调用print_array(数组名, 数组长度);2数组传参核心规则数组名本质是数组首元素地址传参时传递的是地址不是完整数组拷贝函数内部sizeof(数组名)得到的是指针大小64 位系统 8 字节无法获取数组总长度因此必须手动传入长度len函数内操作数组元素和外部用法完全一致修改数组元素会影响外部原数组地址传递特性。