🪑 二维及多维数组
一级数组是一排柜子,二级数组就像一张教室座位表:要说清楚「第几排、第几个」,得用两个编号。再加一个编号,还能变成一栋楼——这就是二维及多维数组。
考纲知识点:C++二维及多维数组的定义、使用
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 四级
(2) 为考纲同一条目,同束结构体与多维数组两知识块
- (2)掌握C++结构体、二维及多维数组(不包括变长数组)的基本概念及使用。
📚
先学一学
花 5 分钟读完下面 5 课,再去闯关就不慌啦
1
🎒 一维数组像柜子,二维数组像座位表
三年级学过的一维数组是一排柜子,用一个下标 a[i] 就能找到。二维数组像教室座位表:要找到小明,得先说是第几排、再说是第几个,所以需要两个下标。C++ 里写成:
🧪 声明一张 3 排 4 列的「座位表」
看得懂就好,不用背:
int seat[3][4]; // 3 排(行)× 4 列
seat[0][0] = 100; // 第 1 排第 1 个座位放 100
seat[2][3] = 88; // 第 3 排第 4 个座位放 88
seat[0][0] = 100; // 第 1 排第 1 个座位放 100
seat[2][3] = 88; // 第 3 排第 4 个座位放 88
方括号里第一个是排(行)、第二个是列,而且和柜子一样都从 0 开始编号。
💡 口诀:二维数组像座位表;[第几排][第几个],前后顺序别颠倒。
2
🔖 两个下标:都从 0 开始数
一张 int a[3][4] 座位表有 3 排、每排 4 个座位。第 1 排的编号是 0,第 1 个座位的编号也是 0:
🧪 下标和「第几个」翻译表
a[0][0] = 第 1 排第 1 个
a[1][2] = 第 2 排第 3 个
a[2][3] = 第 3 排第 4 个(最后一个)
a[2][0] = 第 3 排第 1 个
a[1][2] = 第 2 排第 3 个
a[2][3] = 第 3 排第 4 个(最后一个)
a[2][0] = 第 3 排第 1 个
💡 口诀:排和列都从 0 数;说「第 n 排」要写成 n-1。
⚠️ 越界要小心
a[3][0] 是想开第 4 排——根本没建,越界了!a[0][4] 是想开每排的第 5 个座位,也越界。两个下标都得在自己范围内。
💡 口诀:有几排下标最多到几减 1;有几列也同理。
3
🚶 遍历:一排一排地把座位看完
一维数组用一层 for 循环就能逛完;二维数组是「一排里面还有一排」,所以要两层 for 循环:外层管第几排,内层管第几个座位。
🧪 读代码:给每格放「排号×10+列号」
看得懂就好,不用背:
int a[2][3];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
a[i][j] = i * 10 + j;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
a[i][j] = i * 10 + j;
i 是排号(0、1),j 是列号(0、1、2)。算一算:a[1][2] = 1×10+2 = 12。
💡 口诀:外层管排、内层管列;双层 for 就能逛完整张表。
➕ 读代码:全班总分
看得懂就好,不用背:
int sum = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
sum += a[i][j];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
sum += a[i][j];
从 a[0][0] 逛到 a[2][3],把 3×4=12 个格子全加起来。
💡 口诀:想加整张表,sum 从 0 开始,双层循环挨个加。
4
🏢 初始化写法 & 三维数组像大楼
📝 用花括号一次性填好整张表
看得懂就好,不用背:
int a[2][3] = {{1, 2, 3},
{4, 5, 6}};
// 第 1 排放 1,2,3;第 2 排放 4,5,6
cout << a[1][0]; // 输出 4
{4, 5, 6}};
// 第 1 排放 1,2,3;第 2 排放 4,5,6
cout << a[1][0]; // 输出 4
外层花括号里每一对花括号是一排,一排里逗号隔开的就是这一列的座位。没写满的格子自动补 0。
💡 口诀:几排就写几对花括号;{{第1排},{第2排}} 清清楚楚。
🏬 三维数组:每层楼都有一张座位表
一维是「一排座位」,二维是「一层的座位表」,三维就是「一栋楼」:int b[2][3][4] = 2 层楼 × 每层 3 排 × 每排 4 座。找座位要报三句话:「第几层、第几排、第几个」,所以用三个下标 b[层][排][列]。维度越多,下标越多。
💡 口诀:一维线、二维面、三维楼;下标跟着维度长。
5
🖼️ 行业实际:图片就是二维数组
🖼️ 照片的像素
一张 10×8 的像素图片,就能存成 int img[10][8]:img[行][列] 是那一格的颜色。看地图(第几格)、下围棋(哪行哪列落子)、游戏里的格子地图,全是二维数组在帮忙。
💡 口诀:横是排、竖是列;表格、图片、地图都是一张二维表。
🆚 易混对比:一维 vs 二维
· 一维 int a[5]:一排柜子,一个下标。
· 二维 int a[3][4]:座位表,两个下标,共 3×4=12 格。
别忘了四级考纲不考变长数组——声明时行数和列数都要提前写清楚,不能是变量。
· 二维 int a[3][4]:座位表,两个下标,共 3×4=12 格。
别忘了四级考纲不考变长数组——声明时行数和列数都要提前写清楚,不能是变量。
💡 口诀:格子总数 = 行数 × 列数;变长数组不考,提前写死最稳。
🎯
闯关小锦囊 · 考点提醒
- 二维数组像座位表:int a[3][4] = 3 排 × 4 列 = 12 格,行和列都从 0 数。
- 取格子写两个下标 a[排][列];a[1][2] = 第 2 排第 3 个。
- 遍历用两层 for:外层排号、内层列号;a[i][j] = i*10+j 会让 a[1][2] = 12。
- 初始化每排一对花括号:{{1,2,3},{4,5,6}};三维 = 楼(层、排、列三个下标)。
- 两个下标都不能越界;格子总数 = 行 × 列;不考变长数组。
🎮
学完了?来闯关!
下面 15 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。