一、概念详解
- 一维数组:
- 一组相同类型元素的线性集合
- 在内存中连续存储
- 声明方式:数据类型 数组名[元素个数];
- 例如:int scores[5]; 表示能存储5个整数的数组
- 多维数组:
- 数组的数组(最常见的是二维数组)
- 二维数组可理解为表格(行和列)
- 内存中按行优先顺序存储
- 声明方式:数据类型 数组名[行数][列数];
- 例如:int matrix[3][3]; 表示3×3的整数矩阵
二、核心知识点
特性 | 一维数组 | 二维数组 |
声明方式 | int arr[5]; | int arr[2][3]; |
索引范围 | 0 到 n-1 | 行/列均从0开始 |
内存地址计算 | arr + i | arr[i][j] = &arr[0][0] + i*cols + j |
常见操作 | 遍历、求和、查找 | 矩阵运算、表格处理 |
初始化方式 | int arr[3] = {1,2,3}; | int arr[2][2] = {{1,2},{3,4}}; |
三、简单理解方法
- 一维数组:想象成火车车厢,每个车厢编号从0开始,只能装载相同类型的货物(数据)
- 二维数组:想象成棋盘或Excel表格,需要行列两个坐标定位元素
- 三维数组:想象成魔方立方体,需要x,y,z三个坐标定位(但实际编程中较少使用)
四、记忆技巧
- 关键词联想法:
- 数组名是首元素地址(arr == &arr[0])
- 索引从0开始(计算机从0计数)
- 多维数组是嵌套结构(二维数组是一维数组的数组)
- 图像记忆法:
一维数组:[0][1][2][3][4] → 直线排列 二维数组: [0,0][0,1][0,2] [1,0][1,1][1,2] → 表格排列
五、代码示例及解释
#include <stdio.h> int main() { // 一维数组示例 int nums[5] = {10, 20, 30, 40, 50}; // 声明并初始化包含5个元素的数组 int sum = 0; // 计算数组元素总和 for(int i=0; i<5; i++) { // 遍历数组索引0到4 sum += nums[i]; // 累加每个元素到sum } printf(“一维数组总和:%d\n”, sum); // 二维数组示例 int matrix[2][3] = { // 声明2行3列的二维数组 {1, 2, 3}, // 第0行初始化 {4, 5, 6} // 第1行初始化 }; // 计算每行元素和 for(int row=0; row<2; row++) { // 遍历每一行 int row_sum = 0; for(int col=0; col<3; col++) { // 遍历当前行的每一列 row_sum += matrix[row][col]; } printf(“第%d行总和:%d\n”, row, row_sum); } return 0; }
六、代码逐行解释
- #include 包含标准输入输出库,用于使用printf函数
- int main() { … }程序入口函数
- int nums[5] = {10, 20, 30, 40, 50};声明并初始化一个包含5个整数的一维数组
- int sum = 0;初始化求和变量
- for(int i=0; i<5; i++) { … }循环5次(i从0到4),遍历数组所有元素
- sum += nums[i];将当前元素累加到sum变量
- printf(“一维数组总和:%d\n”, sum);输出计算结果
- int matrix[2][3] = { {1,2,3}, {4,5,6} };声明并初始化2×3的二维数组,第一维是行,第二维是列
- for(int row=0; row<2; row++) { … }外层循环遍历每一行
- for(int col=0; col<3; col++) { … }内层循环遍历当前行的每一列
- row_sum += matrix[row][col];累加当前行各列元素的值
七、总结归纳
- 一维数组是基础数据结构,用于存储线性数据集合
- 多维数组通过嵌套实现多维数据存储(最常用的是二维数组)
- 数组元素通过下标访问,注意不要越界访问(会导致未定义行为)
- 数组名表示数组首元素地址,sizeof(arr)可以获取数组总字节数
- 实际应用中常用于:存储传感器数据(一维)、图像处理(二维)、三维建模(三维数组)等场景