嵌入式从0到精通——C语言函数
1. 降低程序的耦合性关联度避免重复代码2. 让程序模块化增强代码的复用性1. 函数定义函数的具体实现返回值 函数名形参表 { 函数体 } 返回值类型说明符 int、char、float 等基本数据类型、构造数据类型、void 类型 返回函数最终的结果 void空类型。当函数执行完不需要有任何结果返回时可以使用 void 类型返回值。 函数名标识符遵循标识符的命名规则见名知意 形参表函数执行过程中需要的条件 形式 数据类型 形参名数据类型 形参名2. 函数的调用函数名实参表; 实参表传递给函数的具体的条件 值1值2 1. 实参的个数和形参的个数一致 2. 实参和形参的数据类型要一致或者相互兼容 3. 形参和实参名字可以相同也可以不相同 4. 函数不被调用不执行调用几次执行几次 函数名实参表————表达式结果是函数的返回值类型 函数的返回值有一个明确的返回类型时必须要 return否则系统会返回一个随机值主调函数调用函数的函数称为主调函数main被调函数被调用的函数3. 函数的声明声明1. 当被调函数定义在主调函数的后边编译器报 implicit declaration可以将该函数在主调函数前边进行说明2. 多文件使用函数的时候需要对其进行说明允许被其他文件调用。语法返回值 函数名形参表;4. 函数的调用过程保护现场当函数被调用时会将函数调用位置的下一条指令地址保存在栈空间恢复现场当被调函数执行完时通过出栈保护现场的地址决定了 CPU 继续执行的位置在函数被调用指令的下一条指令地址5. 函数参数传递1. 函数传参的过程其实是实参向形参拷贝的过程实参有实参的空间形参有形参的空间值传递2. 值传递在被调函数中无法修改主调函数中的变量3. 函数传参的顺序自左向右6. 函数的递归调用递归调用函数直接或者间接调用自己本质循环方式注意1. 递归要有递归的出口否则会成为死循环。2. 递归调用系统开销比循环大比如栈7. 函数一维整型数组传参方式定义 返回值 函数名int 数组名[], int len { // sizeof(数组名) ———— sizeof(int *) ———— 8 字节 // 外面数组怎么使用函数内就怎么使用 } 调用 函数名(数组名数组长度)注意1. 数组作为函数传递时形参必须要是数组类型int a[][] 中的常量可以省略2. 数组作为函数传参时本质传递的是数组的首元素地址所以形参本质是一个地址是数组的起始地址3. 由于数组名传参本质传递的是首地址所以必须要传递整型数组长度4. 数组作为函数传递给被调函数后函数内部的使用方法和外面使用一样除了 sizeof