C语言 函数与数组

发布时间:2026/8/2 4:12:14
C语言 函数与数组 一、函数与一维整形数组1. 数组传参写法函数定义格式返回值 函数名(int 数组名[], int len) { // 函数内部数组使用规则和外部一致 // sizeof(数组名形参) → 等价sizeof(int *)64位系统占8字节无法计算数组总长度 }函数调用函数名(数组名, 数组长度);示例void print_array(int a[], int len) { for(int i0; ilen; i) printf(%d , a[i]); } // 调用 int arr[10] {1,2,3}; int len sizeof(arr)/sizeof(arr[0]); print_array(arr, len);2. 核心知识点数组名本质是数组首元素地址数组传参传递的是地址地址传递形参数组[]内常量可省略不能省略数组类型int必须手动传递数组长度函数内部无法通过sizeof算出原数组长度地址传递特性函数内修改数组元素外部原数组同步改变。二、函数与一维字符型数组字符串1. 传参格式函数定义返回值 函数名(char 数组名[]) { // 字符串自带\0结束标记无需额外传长度 }调用函数名(字符数组名);示例void print_str(char str[]) { printf(%s, str); } char s[32] hello; print_str(s);2. 核心知识点无需传递长度字符串末尾存在\0作为结束标识函数内可循环遍历到\0截止形参本质仍是地址sizeof(字符数组形参) 指针大小8 字节不能求原数组总字节地址传递函数内修改字符外部原字符串同步变化。三、函数与二维整形数组1. 传参格式定义规范行数可省略列数必须指定返回值 函数名(int 数组名[][列数], int 行数) { // 列数可通过 sizeof(a[0]) / sizeof(a[0][0]) 计算 }调用示例int a[3][4] {{1,2},{3,4}}; void print_2D(int arr[][4], int row) { int col sizeof(arr[0])/sizeof(arr[0][0]); for(int i0; irow; i) for(int j0; jcol; j) printf(%d , arr[i][j]); } print_2D(a, 3);核心规则二维数组传参形参第二维列不能省略否则编译器无法计算每行内存偏移行数无法在函数内部自动计算必须通过参数传入本质依旧传递数组首地址函数内修改元素会同步影响外部二维数组。四、函数与二维字符型数组存储多组字符串1. 传参格式定义列数固定行数作为参数传入返回值 函数名(char 数组名[][固定列数], int 行数) { }调用示例char str[3][100] {apple, banana, orange}; void print_str_arr(char s[][100], int hang) { for(int i0; ihang; i) puts(s[i]); } print_str_arr(str, 3);说明二维字符数组每行存储 1 个独立字符串每行末尾自带\0传参规则和二维整形数组一致列数不可省略。五、变量的作用域与生命周期从空间作用域、\\时间生命周期\\两个维度划分变量。1. 作用域变量可访问的代码范围1局部作用域定义在{}内部函数内变量、函数形参都属于局部变量。仅当前大括号内可访问出{}直接失效同名变量遵循就近原则内层局部变量屏蔽外层同名变量。2全局作用域定义在所有函数、{}外部的全局变量。整个.c文件任意位置均可访问配合extern可跨文件访问。作用域通用规则变量必须先定义后使用同一作用域不能定义同名标识符嵌套作用域同名变量内层优先。2. 生命周期变量内存从开辟到销毁的存活时长1动态生命周期局部普通变量 auto开辟执行到变量定义代码时分配栈内存销毁离开当前{}作用域栈内存立即回收存储位置栈区初始值未手动初始化时为随机垃圾值。2静态生命周期全局变量 /static 局部静态变量生命周期和整个程序运行周期一致程序启动分配内存程序结束才回收。存储位置数据段.data已初始化 /.bss未初始化初始值不手动赋值默认自动清 0static 局部变量特殊点作用域仍为局部仅生命周期延长。3. 变量四大存储类型格式存储类型 数据类型 变量名;1auto默认所有局部变量默认auto可省略动态栈内存出作用域销毁。2static 静态三种用法修饰局部变量延长生命周期为静态仅第一次进入函数初始化多次调用保留上次值作用域不变仅限函数内访问修饰全局变量限制作用域仅当前.c文件可用外部文件无法 extern 引用修饰函数函数仅本文件内调用对外文件隐藏。3register 寄存器变量作用建议编译器将变量存入 CPU 寄存器加快读写速度限制仅建议编译器可忽略寄存器无内存地址不能取地址。4extern 外部声明修饰全局变量声明该变量定义在其他文件允许跨文件访问修饰函数声明函数实现在外部文件本文件可调用。4. 程序内存分区图说明文本区代码段 .text存放程序二进制指令a.out 编译后的机器码只读常量区.rodata字符串常量、const 只读常量数据区.data手动初始化的全局变量、static 静态变量.bss未初始化全局 /static 变量程序启动自动置 0堆区手动内存分配malloc/free自主控制开辟释放栈区普通局部变量、函数形参、函数调用现场函数退出自动回收内核区、寄存器、cacheCPU 硬件存储程序不可直接操作。