第一课:神奇的小火车——数组为什么能够找到每一节车厢?
🎯 本章学习目标
学完这一章,同学们能够:
✅ 理解数组为什么连续存放
✅ 理解数组名代表什么
✅ 理解为什么知道第一节车厢,就能找到整列火车
✅ 为后面学习指针访问数组做好准备
注意:这一课几乎不讲指针运算,而是先复习"连续内存"的思想。
第一章 故事开始——数据王国来了小火车
1、今天,老师没有带大家去邮局。
也没有去藏宝洞。
今天,我们来到了一座新的地方——
🚂数据火车站!
这里停着许许多多的小火车。
每一列火车,都装着很多很多宝物。
2、国王说:
今天,我们要学习新的居民——数组(Array)。
国王说:
大家先把"数组"这两个字忘掉。
今天,我们不叫它数组。
我们叫它——小火车!
第二章 一节车厢——普通变量
1、以前,我们学过:
int age = 10;(1)汉克老师给大家看:
这是什么?
(2)同学们回答:
一个变量。
(3)没错!
我们把它画成一节车厢。
┌──────────┐ │ 10 │ └──────────┘(4)只有一节。
里面装着:
10(5)如果再来一个变量:
int score = 95;那就是另一节车厢。
┌──────────┐ │ 95 │ └──────────┘(6)汉克老师问:
这两节车厢一定挨着吗?
(7)同学们回答:
不一定!
(8)实际情况,它们可能距离很远。
例如:
1000号房 ↓ age ...... ...... 5000号房 ↓ score两个变量之间,
可能隔着很多很多房间。
所以:
普通变量,是不保证连续的。
第三章 五节车厢——数组来了
1、这时候。
火车站开来一辆真正的小火车!
int train[5] = {10,20,30,40,50};2、汉克老师说:
(1)今天先不看代码,先看火车。
🚂═══════════════════════════ ┌────┬────┬────┬────┬────┐ │10 │20 │30 │40 │50 │ └────┴────┴────┴────┴────┘(2)汉克老师问:
这列火车有几节车厢?
(3)同学们:
五节!
(4)每节车厢里面装着一个数字:
第一节:
10第二节:
20第三节:
30第四节:
40第五节:
50第四章 火车为什么叫数组?
汉克老师说:
为什么它叫数组?
因为:
火车里面不是一个数字。
而是:
很多数字。
并且:
整整齐齐排成一排。
就像:
🚂🚃🚃🚃🚃所以:
我们把它叫做:
数组。
第五章 每节车厢都有门牌号
1、以前。
汉克老师告诉大家。
每个变量都有地址。
2、数组火车也是一样。
假设:
(1)第一节车厢:
地址:
1000(2)第二节:
1004(3)第三节:
1008(4)第四节:
1012(5)第五节:
10163、于是:
整列火车可以画成:
地址: 1000 1004 1008 1012 1016 ┌────┬────┬────┬────┬────┐ │10 │20 │30 │40 │50 │ └────┴────┴────┴────┴────┘老师突然停下来。
问大家:
大家有没有发现一个秘密?
第六章 地址为什么这么整齐?
1、看看:
1000 ↓ 1004 ↓ 1008 ↓ 1012 ↓ 1016是不是每次:
都增加:
42、为什么?
因为:
int通常占:
4个字节(Byte)。
3、也就是说。
每一个整数。
都会占四个小房间。
4、所以:
第一节:
占:
1000 1001 1002 1003第二节。
只能从:
1004开始。
于是:
第三节:
就是:
10085、这里发现:
数组里的元素,一个挨着一个连续存放。
这是很重要的。
第七章 数组为什么一定连续?
1、我们举一个生活中的例子。
(1)在电影院。
你买了:
5张连号电影票。
(2)工作人员会给你:
1号 2号 3号 4号 5号(3)不会:
1号 18号 36号 72号(4)因为:
大家一起坐。
必须连续。
2、数组也是一样。
它申请的是:
一大片连续空间。
所以:
所有元素。
必须排成一排。
第八章 数组名字是谁?
1、汉克老师写下:
train2、汉克老师问:
它是谁?
3、很多同学说:
它是数组。
老师说:
没错。
4、但是。
今天我们换一个角度。
我们看看:
它到底站在哪里。
5、假设:
int train[5]={10,20,30,40,50};内存:
1000 1004 1008 1012 1016 ┌────┬────┬────┬────┬────┐ │10 │20 │30 │40 │50 │ └────┴────┴────┴────┴────┘6、汉克老师问:
如果邮递员想找到整列火车。
最少需要知道什么?
是需要:
全部所有地址吗?
1000 1004 1008 1012 10167、不用!
只要知道:
第一节车厢在哪里。
后面:
全部都能找到。
8、所以:
数组名字:
train就代表:
第一节车厢的位置。
也就是:
1000第九章 第一个实验
1、来看程序。
#include <iostream> using namespace std; int main() { int train[5]={10,20,30,40,50}; cout<<train<<endl; cout<<&train[0]<<endl; return 0; }2、运行后。
可能看到:
0x61FF00 0x61FF00咦?
为什么一样?
3、因为:
train表示:
第一节车厢地址。
而:
&train[0]也表示:
第一节车厢地址。
当然一样!
第十章 千万不要记错
1、汉克老师告诉大家。
有的人都会说:
数组就是指针。
这是不准确的!
2、正确的说法应该是:
数组名在很多情况下,会自动转换成首元素的地址。
也就是说:
对于
int train[5];我们可以把:
train理解成:
&train[0]3、但是:
数组和指针并不是同一个东西。
后面的课程,我们还会证明它们有很多不同。
所以,现在先记住一句最重要的话:
数组名可以表示首元素的地址,但数组本身不是指针。
🎮 课堂小游戏
汉克老师问:
下面哪一句表示第一节车厢的地址?
①
train②
&train[0]③
它们都可以
答案:
✅③
因为:
train和
&train[0]在这里表示同一个地址。
🌟 本章总结
今天,我们没有学习新的运算符。
却建立了一个非常重要的思想:
1、普通变量
像一间房子。
位置可能到处都是。
age ...... score ...... money不保证连续。
2、数组
像一列小火车。
🚂🚃🚃🚃🚃所有元素:
连续存放。
3、数组名
就像火车头的位置。
知道了火车头在哪里。
整列火车都能找到。
所以:
train通常表示:
&train[0]也就是:
第一节车厢(首元素)的地址。
🌈 本章口诀
一辆火车排成排,
车厢之间紧挨挨。
数组元素连续放,
地址不会乱跑开。
火车名字记心怀,
首节车厢它来猜。
知道车头在哪里,
整列火车都能来!
🚀 下一章预告
下一章,我们真正让邮递员(指针)坐上小火车。
同学们会学到:
int train[5] = {10,20,30,40,50}; int *p = train;为什么这句代码可以成立?
为什么:
*p就是第一节车厢?
为什么:
p + 1就能走到第二节车厢?
我们会继续用"小火车"的故事,把一维数组与指针的关系讲清楚。