C语言数组与函数核心知识总结
第一部分数组数组是一种存储多个相同类型元素的集合是C语言中最重要的数据结构之一。. 一维数组创建type arr_name[常量值];例如int math[20];用于存储20个整数。初始化创建时给定初始值。完全初始化int arr[5] {1, 2, 3, 4, 5};不完全初始化剩余元素自动初始化为0。int arr2[6] {1};省略大小数组初始化时可省略大小编译器自动计算。int arr[] {1,2,3};使用通过下标访问元素下标从0开始。访问arr[7]遍历通过for循环配合下标遍历所有元素。内存存储数组元素在内存中连续存储。通过打印地址可以发现相邻元素地址差等于单个元素类型大小如整型差4字节。计算元素个数使用sizeof操作符。sizeof(arr)计算数组总字节大小。sizeof(arr) / sizeof(arr[0])计算数组元素个数。这是一个常用技巧可提高代码适应性。2. 二维数组概念一维数组作为元素构成的数组可理解为矩阵。创建type arr_name[行数][列数];例如int arr[3][5];创建一个3行5列的整型数组。初始化按行完全初始化int arr[3][5] {{1,2}, {3,4}, {5,6}};按顺序初始化int arr[3][5] {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};省略行不可省略列int arr[][5] {1,2,3,4,5,6,7};编译器会自动推算行数。使用通过行下标和列下标访问元素均从0开始。访问arr[2][4]遍历使用双层嵌套for循环。3. 变长数组C99概念数组长度可以用变量指定在运行时确定。语法int arr[n];(n为变量)。限制不能初始化且并非所有编译器完全支持如VS2022不支持但gcc支持。4. 练习案例二分查找在升序数组中高效查找指定值。通过定义左(left)、右(right)边界和中间(mid)下标每次比较后缩小一半搜索范围。内存存储二维数组在内存中同样连续存储按行顺序排列。arr[0][4]与arr[1][0]地址相邻。第二部分函数函数是完成特定任务的一段代码是C程序的基本模块支持代码复用和模块化。1. 函数分类库函数由C语言标准库或编译器厂商提供如printf,scanf,sqrt。使用前需包含对应头文件如#include stdio.h。自定义函数程序员根据需要自己编写的函数。返回类型 函数名(参数列表) {// 函数体return 返回值; // 可选}形参形式参数定义函数时括号中的变量用于接收值。实参实际参数调用函数时传递给函数的具体值。3. 数组作为函数参数传递方式将数组名作为参数传递。关键特性形参接收数组时可写成数组形式如int arr[]。一维数组形参数组大小可以省略。二维数组形参行可以省略但列不能省略如int arr[][5]。**最重要的一点数组传参时形参不会创建新数组形参操作的数组与实参数组是同一块内存空间。因此函数内对数组元素的修改会影响原数组。关键点形参是实参的一份临时拷贝两者占用不同的内存空间。4. 函数调用方式嵌套调用函数之间互相调用例如函数A内部调用函数B。链式访问将一个函数的返回值作为另一个函数的参数如printf(%d\n, strlen(abc));。5. 函数的声明与定义声明告诉编译器函数的名字、参数和返回类型。写在调用之前通常放在头文件(.h)中。格式int Add(int, int);或int Add(int x, int y);定义函数的具体实现。通常放在源文件(.c)中。原则函数需先声明后使用。将定义放在调用之前等价于声明定义。代码的拆分好处1.一定程度上隐藏代码2.方便多人协作3.代码模块化创建静态库.lib.隐藏代码6. 作用域、生命周期与static、extern关键字static关键字修饰局部变量改变其存储位置从栈区到静态区从而改变生命周期使其在程序运行期间一直存在但不改变作用域。常用于函数调用间保留状态。修饰全局变量/函数改变其链接属性从外部链接变为内部链接使其作用域限制在本源文件内部无法被其他源文件通过extern声明使用。用于隐藏实现细节。extern关键字用于声明在其他源文件中定义的全局变量或函数表示“此标识符定义在外”。作用域变量/标识符的有效代码范围。局部变量所在局部范围如函数内。全局变量整个工程。生命周期变量从创建到销毁的时间段。局部变量进入作用域开始离开作用域结束。全局变量整个程序运行期间。核心关联与编程思想数据与操作的结合数组是组织数据的强大容器而函数是对这些数据进行操作的模块。二者结合是构建复杂程序的基础。模块化与封装函数将特定功能封装使主程序逻辑清晰。static关键字能进一步加强模块的封装性隐藏内部数据与函数。效率与复用通过函数复用代码通过数组高效存储和管理批量同类数据。二分查找算法是数组与逻辑结合提升性能的典范。内存视角理解理解数组的连续存储和函数参数传递的值拷贝普通变量与地址关联数组机制是深入理解C语言内存操作的关键。