第三课 《两层小火车站——二维数组与指针》 本章学习目标学完本章同学们能够✅ 理解二维数组为什么也是连续存放✅ 理解二维数组名字表示什么✅ 理解为什么map表示第一行✅ 理解map1✅ 理解*(map1)✅ 理解map[i][j]为什么可以写成*(*(mapi)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 62汉克老师问有几个站台同学们回答两个3每个站台有几节车厢三个4所以二维数组。其实可以理解成很多行小火车组成的大车站。第二章 原来整个车站还是连续的1、很多同学第一次都会认为第一行放在这里。第二行放在另外一个地方。其实不是2、汉克老师画出内存的分步。1假设地址 1000 1004 1008 1012 1016 10202排列是地址 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汉克老师强调说这是二维数组和一维数组最大的区别。第四章 map1 到哪里去了1、汉克老师继续。如果station表示第一站台。2、那么station1是不是第二站台3、画图。总站 第一站台 1 2 3 ↑ station然后station1 ↓ 第二站台 4 5 6是不是和上一章p1完全一样4、只不过。1上一章一维数组。移动的是一个元素。2今天二维数组。移动的是一整行。3汉克老师再次强调二维数组每移动一次是跳过一整行。第五章 为什么不是10041、有的同学这里还是会疑惑。汉克老师。第一行不是1000吗为什么station1不是10042、汉克老师重新画图。第一行 1 2 31其实占了三个int。2也就是1000 1004 10083所以第二行。4必须从1012开始。5于是station1 ↓ 10123、汉克老师总结1一维数组指针一次走一个元素。2二维数组指针一次走一整行。第六章 第一颗星号出现了1、汉克老师写*(station1)1问什么意思2大家不要急。先拆开。第一步。station13来到第二站台。第二站台 4 5 64第二步。前面的*5表示打开。6于是。得到第二行。也就是4 5 67老师说注意这里。得到的不是数字4。而是第二行。很多同学都会弄错。第七章 第二颗星号出现了1、老师继续。如果*(station1)到了第二行。2、那么如果想找到数字5。怎么办3、邮递员继续走。写*(station1)1大家分析。先得到第二行。4、然后向后走一格。于是来到5但是。这时候。还没有打开车厢。5、所以。再来一个*最终*(*(station1)1)就是56、老师画完整路线。station ↓ 第一站台 ↓ 1 ↓ 第二站台 ↓ * ↓ 第二行开始 ↓ 1 ↓ 数字5位置 ↓ * ↓ 5同学们看到这里。恍然大悟。第八章 神奇的公式1、汉克老师写两句代码。station[1][2]还有*(*(station1)2)老师问它们一样吗答案完全一样2、我们分析。station ↓ 第一行 ↓ 1 ↓ 第二行 ↓ * ↓ 第二行开始 ↓ 2 ↓ 第三个数字 ↓ * ↓ 6所以station[1][2] 6而*(*(station1)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第二题*(*(station0)1)是多少答案2第三题station[1][0]是多少答案4第四题*(*(station1)0)是多少答案4你发现了吗数组下标和指针写法只是两种不同的表达方式访问的始终是同一个元素。 本章总结今天我们走进了火车总站发现了二维数组与一维数组最大的区别一维数组中数组名表示第一个元素的地址。二维数组中数组名表示第一行的地址。一维数组每次1走到下一个元素。二维数组每次1走到下一行。一维数组只需要一次*就能取到元素。二维数组需要两次*第一次找到这一行第二次找到这一行中的具体元素。 本章口诀一维火车排成行车头一指到首厢。二维车站分站台车头先把首行访。一次加一换新行一次星号到行旁。再走几步再开门真正数据眼前藏 下一部分预告——《数组王国指针终极挑战》