一维数组和多维数组
一维数组和多维数组

一维数组和多维数组

一、概念详解

  1. ​一维数组​​:
  • 一组相同类型元素的线性集合
  • 在内存中连续存储
  • 声明方式:数据类型 数组名[元素个数];
  • 例如:int scores[5]; 表示能存储5个整数的数组
  1. ​多维数组​​:
  • 数组的数组(最常见的是二维数组)
  • 二维数组可理解为表格(行和列)
  • 内存中按行优先顺序存储
  • 声明方式:数据类型 数组名[行数][列数];
  • 例如:int matrix[3][3]; 表示3×3的整数矩阵

二、核心知识点

特性一维数组二维数组
声明方式int arr[5];int arr[2][3];
索引范围0 到 n-1行/列均从0开始
内存地址计算arr + iarr[i][j] = &arr[0][0] + i*cols + j
常见操作遍历、求和、查找矩阵运算、表格处理
初始化方式int arr[3] = {1,2,3};int arr[2][2] = {{1,2},{3,4}};

三、简单理解方法

  1. ​一维数组​​:想象成火车车厢,每个车厢编号从0开始,只能装载相同类型的货物(数据)
  2. ​二维数组​​:想象成棋盘或Excel表格,需要行列两个坐标定位元素
  3. ​三维数组​​:想象成魔方立方体,需要x,y,z三个坐标定位(但实际编程中较少使用)

四、记忆技巧

  1. ​关键词联想法​​:
  • 数组名是首元素地址(arr == &arr[0])
  • 索引从0开始(计算机从0计数)
  • 多维数组是嵌套结构(二维数组是一维数组的数组)
  1. ​图像记忆法​​:

一维数组:[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; }

六、代码逐行解释

  1. #include 包含标准输入输出库,用于使用printf函数
  2. int main() { … }程序入口函数
  3. int nums[5] = {10, 20, 30, 40, 50};声明并初始化一个包含5个整数的一维数组
  4. int sum = 0;初始化求和变量
  5. for(int i=0; i<5; i++) { … }循环5次(i从0到4),遍历数组所有元素
  6. sum += nums[i];将当前元素累加到sum变量
  7. printf(“一维数组总和:%d\n”, sum);输出计算结果
  8. int matrix[2][3] = { {1,2,3}, {4,5,6} };声明并初始化2×3的二维数组,第一维是行,第二维是列
  9. for(int row=0; row<2; row++) { … }外层循环遍历每一行
  10. for(int col=0; col<3; col++) { … }内层循环遍历当前行的每一列
  11. row_sum += matrix[row][col];累加当前行各列元素的值

七、总结归纳

  1. ​一维数组​​是基础数据结构,用于存储线性数据集合
  2. ​多维数组​​通过嵌套实现多维数据存储(最常用的是二维数组)
  3. 数组元素通过下标访问,注意不要越界访问(会导致未定义行为)
  4. 数组名表示数组首元素地址,sizeof(arr)可以获取数组总字节数
  5. 实际应用中常用于:存储传感器数据(一维)、图像处理(二维)、三维建模(三维数组)等场景

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注