GESP4级C++考试语法知识(二、指针与数组(3、二维数组与指针)
第三课 《两层小火车站——二维数组与指针》
🎯 本章学习目标
学完本章,同学们能够:
✅ 理解二维数组为什么也是连续存放
✅ 理解二维数组名字表示什么
✅ 理解为什么map表示第一行
✅ 理解map+1
✅ 理解*(map+1)
✅ 理解
map[i][j]为什么可以写成
*(*(map+i)+j)并且真正理解整个寻找过程。
第一章 数据王国建了一座火车总站
1、上一章,我们认识的是:
🚂 一列小火车。
int train[5];只有:
一排。
2、今天。
数据王国越来越繁荣。
(1)国王说:
一列火车已经不够用了。
(2)于是。
建了一座:
🚉火车总站!
3、这里有很多站台。
(1)每个站台。
都停着一列小火车。
(2)例如:
int station[2][3]= { {1,2,3}, {4,5,6} };4、汉克老师说:
(1)今天不要看代码。
先看车站。
🚉 火车总站 第一站台 🚂 1 2 3 第二站台 🚂 4 5 6(2)汉克老师问:
有几个站台?
同学们回答:
两个!
(3)每个站台有几节车厢?
三个!
(4)所以:
二维数组。
其实可以理解成:
很多行小火车组成的大车站。
第二章 原来整个车站还是连续的!
1、很多同学第一次都会认为:
第一行放在这里。
第二行放在另外一个地方。
其实不是!
2、汉克老师画出内存的分步。
(1)假设:
地址 1000 1004 1008 1012 1016 1020(2)排列是:
地址 1000 1004 1008 1012 1016 1020 ┌────┬────┬────┬────┬────┬────┐ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ └────┴────┴────┴────┴────┴────┘(3)同学们问:
(1)咦?
怎么没有分成两排?
(2)因为:
计算机里面。
根本没有真正的:
第一排。
第二排。
(3)它只有:
一大片连续内存。
(4)只是为了方便阅读。
我们把它画成:
第一站台 1 2 3 第二站台 4 5 63、汉克老师笑着说:
二维数组在内存里依然是连续存放的!
这是大家需要牢记的事。
第三章 map 到底是谁?
1、汉克老师写:
station问:
它是谁?
2、有的同学说:
整个二维数组。
3、没错。
但是。
对于指针来说。
它还有一个身份。
4、汉克老师重新画图。
🚉总站 第一站台 1 2 3 第二站台 4 5 65、汉克老师说:
如果邮递员第一次来到车站。
是不是先找到:
第一站台?
(1)所以。
station ↓ 第一站台不是:
数字1。
而是:
整整第一行!
(2)汉克老师强调说:
这是二维数组和一维数组最大的区别。
第四章 map+1 到哪里去了?
1、汉克老师继续。
如果:
station表示:
第一站台。
2、那么:
station+1是不是:
第二站台?
3、画图。
🚉总站 第一站台 🚂1 2 3 ↑ station然后:
station+1 ↓ 第二站台 🚂4 5 6是不是和上一章:
p+1完全一样?
4、只不过。
(1)上一章一维数组。
移动的是:
一个元素。
(2)今天二维数组。
移动的是:
一整行。
(3)汉克老师再次强调:
二维数组每移动一次,是跳过一整行。
第五章 为什么不是1004?
1、有的同学这里还是会疑惑。
汉克老师。
第一行不是:
1000吗?
为什么:
station+1不是:
10042、汉克老师重新画图。
第一行 1 2 3(1)其实占了:
三个int。
(2)也就是:
1000 1004 1008(3)所以:
第二行。
(4)必须从:
1012开始。
(5)于是:
station+1 ↓ 10123、汉克老师总结:
(1)一维数组指针
一次走:
一个元素。
(2)二维数组指针
一次走:
一整行。
第六章 第一颗星号出现了
1、汉克老师写:
*(station+1)(1)问:
什么意思?
(2)大家不要急。
先拆开。
第一步。
station+1(3)来到:
第二站台。
第二站台 🚂4 5 6(4)第二步。
前面的:
*(5)表示:
打开。
(6)于是。
得到:
第二行。
也就是:
4 5 6(7)老师说:
注意!
这里。
得到的:
不是数字4。
而是:
第二行。
很多同学都会弄错。
第七章 第二颗星号出现了
1、老师继续。
如果:
*(station+1)到了:
第二行。
2、那么:
如果想找到:
数字5。
怎么办?
3、邮递员继续走。
写:
*(station+1)+1大家分析。
先得到:
第二行。
4、然后:
向后走一格。
于是:
来到:
5但是。
这时候。
还没有打开车厢。
5、所以。
再来一个:
*最终:
*(*(station+1)+1)就是:
56、老师画完整路线。
station ↓ 第一站台 ↓ +1 ↓ 第二站台 ↓ * ↓ 第二行开始 ↓ +1 ↓ 数字5位置 ↓ * ↓ 5同学们看到这里。
恍然大悟。
第八章 神奇的公式
1、汉克老师写两句代码。
station[1][2]还有:
*(*(station+1)+2)老师问:
它们一样吗?
答案:
完全一样!
2、我们分析。
station ↓ 第一行 ↓ +1 ↓ 第二行 ↓ * ↓ 第二行开始 ↓ +2 ↓ 第三个数字 ↓ * ↓ 6所以:
station[1][2] = 6而:
*(*(station+1)+2) = 6完全相同!
第九章 一张总图彻底理解
station │ ▼ 第一站台(第一行) 1 2 3 ▲ * │ +1 ▼ 第二站台(第二行) 4 5 6 ▲ * +2 ▼ 61、汉克老师说:
(1)以后。
看到:
两颗星号。
不要害怕。
(2)它们只是:
第一次:
找到这一行。
第二次:
打开这一格。
第十章 一维数组与二维数组到底有什么不同?
给大家一张总结表。
| 内容 | 一维数组 | 二维数组 |
|---|---|---|
| 数组名表示 | 第一个元素地址 | 第一行地址 |
+1 | 下一个元素 | 下一行 |
第一次* | 得到元素 | 得到一整行 |
第二次* | 不需要 | 得到真正元素 |
汉克老师提醒大家:
很多同学就是因为没有分清"元素"和"一整行",才觉得二维数组指针特别难。
🎮 课堂挑战
已知:
int station[2][3] = { {1,2,3}, {4,5,6} };请同学们思考:
第一题
station[0][1]是多少?
答案:
2第二题
*(*(station+0)+1)是多少?
答案:
2第三题
station[1][0]是多少?
答案:
4第四题
*(*(station+1)+0)是多少?
答案:
4你发现了吗?
数组下标和指针写法,只是两种不同的表达方式,访问的始终是同一个元素。
🌟 本章总结
今天,我们走进了火车总站,发现了二维数组与一维数组最大的区别:
一维数组中,数组名表示第一个元素的地址。
二维数组中,数组名表示第一行的地址。
一维数组每次
+1,走到下一个元素。二维数组每次
+1,走到下一行。一维数组只需要一次
*就能取到元素。二维数组需要两次
*:第一次找到这一行,第二次找到这一行中的具体元素。
🌈 本章口诀
一维火车排成行,
车头一指到首厢。
二维车站分站台,
车头先把首行访。
一次加一换新行,
一次星号到行旁。
再走几步再开门,
真正数据眼前藏!
