Linux入门DAY11 #嵌入式开发基础##Linux##C语言#前言本篇承接前面数组、函数基础内容聚焦函数和各类数组传参、变量作用域 / 生命周期、内存分区、存储修饰符 static/auto/register/extern是 C 语言入门到进阶分水岭面试高频考点全文结合底层内存图解、标准代码拆解。一、函数与一维整型数组1. 数组作为函数参数的定义语法数组传参本质传递数组首元素地址两种形参写法完全等价// 写法1数组形式可读性更强推荐 void print_array(int a[], int len);// 写法2底层指针等价形式 void print_array(int *a, int len);2. 数组函数标准调用方式int arr[10] {1,2,3,4,5};int length sizeof(arr)/sizeof(arr[0]);print_array(arr, length);3. 核心底层特性函数内部执行sizeof(a)得到的是指针占用字节64 位系统为 8 字节无法计算原数组真实长度因此必须手动传入长度参数数组传递的是地址函数内修改数组元素会同步修改外部原始数组数组名仅代表数组首元素地址不支持整体赋值操作。二、函数与一维字符型数组字符串1. 字符串数组传参基础语法void print_str(char str[]);2. 和整型数组传参核心区别无需手动传递长度参数字符串末尾自带\0结束标记函数内依靠\0终止遍历形参sizeof(str)依旧返回指针大小8 字节仅靠结束符判断字符串边界。三、函数与二维整型数组1. 二维数组传参硬性语法规则定义形参时行数可省略列数必须固定省略列数编译器无法识别内存排布// 合法标准写法 void print_2D(int a[][4], int row);// 非法写法编译报错// void print_2D(int a[][], int row);四、函数与二维字符型数组1. 二维字符数组作用存储多组独立字符串每行代表一条完整字符串列数限制单行最大字符容量。char str[3][100] {hello, world, c language};五、变量的作用域 生命周期C 语言重难点一作用域变量可访问的范围空间维度1. 局部变量定义位置函数内部、代码块{}内部、函数形参访问限制仅当前{}代码块内部可访问代码块外部无法使用同名覆盖规则内层代码块定义和外层同名变量遵循就近原则外层变量在内层不可见。2. 全局变量定义位置所有函数外部源文件最顶层访问范围当前源文件全部函数均可访问其他.c文件通过extern声明后可跨文件访问。3. 通用规则标识符必须先定义后使用同一层级作用域中不允许定义同名变量嵌套作用域存在同名变量时内层屏蔽外层变量。二生命周期变量内存存在的时长时间维度1. 动态生命周期普通 auto 局部变量内存开辟程序执行到变量定义代码时在栈区分配内存内存销毁跳出当前{}代码块栈内存自动回收释放初始值特性未手动初始化时存储随机脏数据。2. 静态生命周期全局变量 /static 修饰局部变量内存开辟程序加载运行阶段提前分配内存内存销毁整个程序运行结束后统一释放初始值特性未手动初始化时系统自动赋值为 0存储区域数据段不存放在栈区。六、变量四大存储类型修饰符语法标准格式存储类型 数据类型 变量名;1. auto默认修饰符所有普通局部变量默认自带 auto 关键字日常编码可省略不写变量存储在栈区拥有动态生命周期跳出代码块自动销毁。auto int num 10; // 等价写法效果完全一致 int num 10;2. static三大核心用途面试高频考点修饰局部变量生命周期升级为静态生命周期程序结束才释放内存作用域不改变依旧仅当前代码块内部可见仅在第一次执行定义代码时初始化函数多次调用会保留上一次变量值修饰全局变量限制变量作用域仅当前.c源文件内部可用外部文件无法通过extern导入修饰函数限定函数仅本文件内调用其他源文件无法访问该函数。register寄存器变量作用向编译器建议将变量存入 CPU 寄存器减少内存读写开销提升运行速度关键限制仅为编译器优化建议编译器可忽略寄存器无内存地址无法使用取地址符register int i; // 下方代码编译报错寄存器变量不能取地址 // int *p i;4. extern外部声明修饰符修饰全局变量告知编译器该变量实际定义在其他源文件允许当前文件跨文件访问修饰函数声明其他源文件中已实现的函数无需在当前文件重复编写函数体。七、程序内存分区详解分区层级高地址→低地址内核区操作系统专属内存区域用户自定义代码无读写权限栈区 (stack)存放 auto 局部变量、函数形参函数调用时分配内存执行完毕自动释放堆区 (heap)由程序员通过malloc/free手动申请、释放内存数据区.data段存放已初始化的全局变量、static 静态变量.bss段存放未初始化全局变量、static 静态变量程序加载时系统自动清零.rodata只读常量区存放字符串常量、const 只读常量文本区 (.text)存放编译后的二进制机器指令代码CPU 寄存器硬件高速存储register 修饰的变量优先存入。全局 / 静态变量统一特性汇总存储位置数据区拥有静态生命周期未初始化默认值为 0static 修饰局部变量局部作用域 静态生命周期static 修饰全局变量 / 函数文件私有禁止跨文件访问。