一、 函数传参的深化分类· 1.1 基本数据类型的值传递· 传递机制实参将值拷贝给形参形参是实参的副本。· 核心特性函数体内修改形参的值不影响外部的实参。· 适用范围函数仅需读取外部变量值进行运算的场景。· 1.2 全局变量传递数据· 定义利用定义在所有函数外部的变量进行跨函数数据共享。· 核心特性任何函数均可直接读写全局变量。· 主要缺陷破坏函数的封装性与独立性增加模块间耦合度降低代码可维护性。· 同名隐藏规则若函数内部定义了与全局变量同名的局部变量在该函数作用域内局部变量会屏蔽隐藏全局变量。· 1.3 一维数组传递· 传递形式传递数组名首地址和数组长度。· 本质机制形参中的数组写法本质上退化为指针指向实参数组的首地址。· 核心特性函数体内操作数组元素会直接影响外部的原始数组与基本类型值传递有本质区别。· 1.4 一维字符数组字符串传递· 传递形式传递字符数组名首地址可依赖 \0 结尾特性省略长度参数。· 核心特性与整型数组一致函数内修改字符串内容外部实参同步改变。---二、 递归函数· 2.1 定义在函数定义中直接或间接地调用函数自身。· 2.2 构成三要素· 结束条件递归出口必须存在一条分支不调用自身直接返回确定结果。· 递推关系将原问题拆解为规模更小的同类子问题。· 返回值传递逐层将计算结果返回至上一层调用。· 2.3 执行机制遵循“递推”与“回归”两个阶段先层层深入再层层返回。· 2.4 主要局限性· 栈溢出风险每次调用都会在栈区开辟新的栈帧递归层次过深将耗尽栈内存。· 效率低下存在大量重复计算时间和空间开销随递归深度显著增加。---三、 预处理命令· 3.1 宏定义· 不带参数的宏常量宏· 性质预处理阶段的纯文本替换不进行任何语法或计算处理。· 用途定义常量值以提高代码可读性作为配置开关实现参数的快速批量调整。· 带参数的宏宏函数· 性质纯文本替换无类型检查无函数调用开销不涉及压栈与出栈操作。· 效率特性执行阶段效率较高但编译后的代码体积会随调用次数增加而膨胀。· 适用范围仅适用于封装简短、频繁调用的运算逻辑不适用于复杂功能模块。· 3.2 条件编译· 作用根据预设条件判断决定哪些代码块参与编译不满足条件的代码在编译阶段被丢弃。· #if / #elif / #else / #endif依据常量表达式进行条件控制。· #ifdef 与 #ifndef依据宏名是否已被定义进行条件控制。· #ifdef若宏已定义则编译后续代码块。· #ifndef若宏未定义则编译后续代码块常用于防止头文件重复包含。· 3.3 头文件包含· 作用将指定头文件的全部内容原样展开并引入当前源文件。· 搜索路径差异双引号 vs 尖括号· #include 头文件仅查找系统标准库路径。· #include 头文件优先查找当前源文件所在目录未找到再查找系统路径。· 头文件标准内容规范· 构造数据类型定义结构体、联合体、枚举。· 全局变量声明使用 extern 关键字与全局函数声明。· 宏定义与类型重定义。
day10
一、 函数传参的深化分类· 1.1 基本数据类型的值传递· 传递机制实参将值拷贝给形参形参是实参的副本。· 核心特性函数体内修改形参的值不影响外部的实参。· 适用范围函数仅需读取外部变量值进行运算的场景。· 1.2 全局变量传递数据· 定义利用定义在所有函数外部的变量进行跨函数数据共享。· 核心特性任何函数均可直接读写全局变量。· 主要缺陷破坏函数的封装性与独立性增加模块间耦合度降低代码可维护性。· 同名隐藏规则若函数内部定义了与全局变量同名的局部变量在该函数作用域内局部变量会屏蔽隐藏全局变量。· 1.3 一维数组传递· 传递形式传递数组名首地址和数组长度。· 本质机制形参中的数组写法本质上退化为指针指向实参数组的首地址。· 核心特性函数体内操作数组元素会直接影响外部的原始数组与基本类型值传递有本质区别。· 1.4 一维字符数组字符串传递· 传递形式传递字符数组名首地址可依赖 \0 结尾特性省略长度参数。· 核心特性与整型数组一致函数内修改字符串内容外部实参同步改变。---二、 递归函数· 2.1 定义在函数定义中直接或间接地调用函数自身。· 2.2 构成三要素· 结束条件递归出口必须存在一条分支不调用自身直接返回确定结果。· 递推关系将原问题拆解为规模更小的同类子问题。· 返回值传递逐层将计算结果返回至上一层调用。· 2.3 执行机制遵循“递推”与“回归”两个阶段先层层深入再层层返回。· 2.4 主要局限性· 栈溢出风险每次调用都会在栈区开辟新的栈帧递归层次过深将耗尽栈内存。· 效率低下存在大量重复计算时间和空间开销随递归深度显著增加。---三、 预处理命令· 3.1 宏定义· 不带参数的宏常量宏· 性质预处理阶段的纯文本替换不进行任何语法或计算处理。· 用途定义常量值以提高代码可读性作为配置开关实现参数的快速批量调整。· 带参数的宏宏函数· 性质纯文本替换无类型检查无函数调用开销不涉及压栈与出栈操作。· 效率特性执行阶段效率较高但编译后的代码体积会随调用次数增加而膨胀。· 适用范围仅适用于封装简短、频繁调用的运算逻辑不适用于复杂功能模块。· 3.2 条件编译· 作用根据预设条件判断决定哪些代码块参与编译不满足条件的代码在编译阶段被丢弃。· #if / #elif / #else / #endif依据常量表达式进行条件控制。· #ifdef 与 #ifndef依据宏名是否已被定义进行条件控制。· #ifdef若宏已定义则编译后续代码块。· #ifndef若宏未定义则编译后续代码块常用于防止头文件重复包含。· 3.3 头文件包含· 作用将指定头文件的全部内容原样展开并引入当前源文件。· 搜索路径差异双引号 vs 尖括号· #include 头文件仅查找系统标准库路径。· #include 头文件优先查找当前源文件所在目录未找到再查找系统路径。· 头文件标准内容规范· 构造数据类型定义结构体、联合体、枚举。· 全局变量声明使用 extern 关键字与全局函数声明。· 宏定义与类型重定义。