00:03
二位数组。多维数组值二维数组多维数组呢,实际上就是在一维数组的基础上进行一个扩展,多维数组有更多,比如说二维,三维对不对,那么我们在这里呢,给大家介绍二维数组,像三维数组,四维数组其实用的比较少,那么用法呢,跟二维数组类似,所以说我们这重点给大家讲一下二维数组就可以了。那二位数组的一个应用场景先给大家看一下,比如说我们将来开发一个五子棋的游戏。那么棋盘就是一个二位数,大家有没有发现,你看这个就算就算是一个数组吧,第二排又是一个数组,第三排又是一个数组。所以说像这种。这种这种图的结构,或者是我们叫做一个棋盘,就可以用一个二维数组来表示。那么二位数组。它的基本使用是什么样子的呢?我们先给大家举个例子。比如说。
01:05
我们要求大家使用二维数组来输出下面这个图形。输出下面这个图形,那么我们应该怎么来完成呢?其实非常的简单啊,其实非常简单,我给大家来举个例子就可以了。好的,那现在呢,我们来写一个案例。我们来写案例。这是关于多位数组的,对吧,这是二维数组。呃,那么我们这样写一个吧。Multi。Multiply数组,多位数组,这里面我们讲的是二维数组哈,DEMO。零一低概率。那现在呢?我们来跟大家玩一把。首先呢,我们仍然是include。一个头文件include,头文件std。Void主函数。
02:02
然后我把代码给各位同学拿过来好。代码给各位同学拿过来。那么这边我们来看看他的一个使用情况,我们来说明一下就可以了,难度并不大,首先呢,大家可以看到它要求是一个几几个数组,大家看一下是不是一排两排,三排,四排,几列呢?一列两列,三列,四列,五列,六列,所以说这个图形它对应的二元数组呢,就是四六。四六,那同学们可以看到这个四六,这个就是二四。六表示的是什么呢?注意听表示的是哎,表示一个四行,四行六列六列的一个二维数组。就这么来的,那如果说这个数组在没有初始化之前呢,它分配的都是一些垃圾,呃,内存垃圾值就说不确定,什么叫内存垃圾值呢?就是不确定的值。
03:07
那现在呢?为了好看,我们先遍历这个二维数组,并且初始化,来我们看一下。我把这边呢,先给同学们注销一下。对,下面呢,我也在注销一下,待会我们再看这里面是什么内容,好吧,咱们一步一步来,同学们看这里我定了一个I和节,然后呢,我们全部初始化为零,怎么初始化的呢?这个地方是先变利。先变历列行,一共四行嘛,说I呢是零到四,下面这个呢是变历列。诶,这边是便例列,能看能看懂吗?那就是四行六列,然后呢,我把它的每一个值复制为零,然后这边呢,我们就输出了这个二位输出。这里就输出二维数组很简单,你看二维数组怎么输出的呢?我们仍然是变例行,在变例列输出的时候呢,我们就这样输出的,大家看到没有啊,这个基本就不用看它啊,这个就不用看它了。
04:11
那么我们来运行一下,看看输出的效果跟我们想的是否一样,跑起来运行,现在因为全部是零,所以说它四行六列的是全部失零,大家注意看一下。运行起来你看四行六类全是零,但是这个跟我们要求有点区别,人家要求的是这里面的一。这个值是一,那大家看这是几行几列啊。这个地方呢,就是第二行。第几列呢?第三列,所以这个地方二行三列是一个零,这边还有一个三行二列是一个二,这边是三行四列。也是一个一,但是我们知道它这个行列啊,都是从零开始标号的。
05:01
是不是所以说这边是二行三列呢,它反映到我们对应的元素就应该是一二。这边反应的元素呢就是一,这边反映到这个元素值呢,就是二三,因此我们要给他付的123呢,其实是A12。A21A23,看看是不是样子的,同学们是不是122123好,我把这个就可以打开了,当我们这个打开过后,我们再来运行呢,同学们可以看到这个输出的效果图形就跟我们想象的完全一样了,大家可以看这边输出的效果。诶,各位同学可以看到在第二行的第三列有一个一,在第三行的第二列有一个二,在第三行的第四列有一个三,就是这样来的。注意啊,它的标号仍然是从零开始的,没问题吧,那下面呢,我们紧接着来再来看一下二维数组的一个内存布局,这个是非常重要的,我们先来看。
06:07
我们先来画一个图哈,各位同学看一下,那么关于二维二维数组,它在内存里面布局是什么样子的呢?它是这个样子的。如果说我们画一个内存图来说的话呢,可以仍然像原先这样子来给他画一个,你们就一目了然了,咱们就画一次好吧。就画一次。比方说同学们看,这是我的一个内存。这是我的一个内存,那现在的代码呢,是如此这般的。对,这样子的一段代码,我们来看看这段代码啊,呃,他在内存里面,它会怎么进行一个分布,好把这个说清楚,其实后面的东西呢,就一马平川了,还是。抓住他的根本。抓住他的根本就好说了。好,我往下面来一点哈,往下面来一点。
07:01
这边梳理一下。好,同学们,那我们现在主要是来看这个A,这个数组前面上面还有一个A,对这句话还少拷贝了一个,就上面这个A46这句话我没有拷贝过来,大问题,那么这个A46在内存里面,它到底怎么存在呢?它到底怎么存在呢?好,所以说我要开始画这个图了。首先呢,还是一根内存条啊,还是第一个速度就这样一行。那么它这里面有这这一行有几个元素呢?好,同学们知道,它现在呢,一共有六个。好一个。两个三个四个五个六个,我给他排一下。好,这是第六个。第五个。好,往这边再稍微挪一挪。好,这边呢,我们再来一点空间哈,往这边再挪一下。
08:07
好,然后这边有一个,那这个就是我们的第一行,第一行的时候呢,大家可以想象哈,我们这个A就是同学们看这个A它到底指向了哪里呢。这点是比较重要的。这个A。好,我在这写一个吧。这点特别重要,A是一个数组的名称,它其实呢,它是直接指向我们的第一个元素,就这个数组,这个数组的第一个元素,这一点大家要非常的清晰,好,我换一个红色。大家看清楚了,就这个A数,A这个二维数组,它指它的这个地址呢,是指向我们这个二维数组里面的第一个元素,当然它前前面都是零,那一共有几个这样的数组呢?好,一共有。六个。我跟大家用这个拎出来。诶,这个不好意思,这边呢,要这样去选它。
09:02
哎呀,这个还不行,这样子,呃,我这样再重新选择一下。好六个。让让我复制一下一份。好,往这边挪一下,这是它的第一行,这是它的第二行。好,这是第二行对不对,那么还有一行第三行。整体的。第三行,这是它的第呃一,他一共不是四行吗?还差一行。这样子的,那么我们我们现在一共有多少个元素,就是四乘以六,那初始化的时候呢,它是垃圾值,所以说你不能乱输出,输出来乱七八糟的,那这边创初始化的时候就是零,是先遍历我们的行,再遍历它,每遍历一次呢,大家可以看到它实际上是。给的零,所以说这里面呢,每一个都是零了。000,好,下面的一样哈,下面一样也都是变成了零。
10:04
对,这个也变成零,快速的给大家写一下。00000000,紧接着呢,它找到这个A121就是代表第几行呢?第二行,二代表第几列,第三列,那也就是说他找到了这个值,把这个呢变成了一。然后这边二一呢,就是第三行的第二列,就它把这个呢,变成了多少呢,各位同学。OK,诶不好意思,这个零它变成了二。把第二第三行的第四个就这个变成了几呢?诶,它变成了三,就这样来的。好,那明白这个东西还有一个最关键的地方,就是我们要分析一下它的地址,分析地址。分析地址。分析地址的一个分布情况,那么首地址当时从这开始编号了,那么他这个地址是怎么来的呢?大家看,我们先来看他的首地址是多少哈,我把这边全部打开。
11:09
我一次性全部打开,注意听。我打开过后呢,可以看到我先打的是A的首地址,再打出。A,零的首地址,同学们看到这两个地址应该是相同的,就是二维数组这个A。他的首地址其实就是我们二位数组的。A0就是它的第一行的那一个元素的地址,所以这两个是相同的。啊,那么A00这个地址呢,也是相同,也就是说这三个其实都是一样,到了A01呢,其实就是在A00的基础上再增加了四个字节,为什么增加四个字节呢?是因为。是因为就是我们这个元素是int占四个字节,我给大家输出一下,大家认真观察一下哈。来看一下此时此刻我们输出的效果呢,就能够看到它的一个底层的分布,大家看到它在这个AV数组,第一个就是是你们有没有发现前三个都是一样的。
12:09
到了零一,实际上是在这个零零的基础上加了一个四,你看七零变七四了,看到没有,所以说所以说这个地址的话呢,大家一目而了然。一目了然,好,那这个明白了不,我也不不在这写了,然后呢,我把这个全部给你们打开,大家看一下,我在这里输出了所有的地址,就是各个元素所有的地址,包括它的值,就是这个第一个元素的它的这是它的,呃,每一行的,每一行的那个元素的地址,然后呢,再把它每一个元素的地址也打出来了,这样子大家就看得更清晰了,来,看清楚一点啊,走起来。走起,先把这个取消。取消我们看一下,这下子就非常清晰了。
13:02
运行过后呢,我们可以看到每一行的这个地址和后面是大,呃,都是在增加,四,我把这个再再往面放大一点。我这个有点儿还是不够哈。再放一点点,可能看的有点不清晰了,大家看到这里就行了,大家看A0。是第一行的第一,就是我们第一行的第一个元素的地址,你看它的地址其实就是A00地址,你看这个是不是是不是相同的,这两个相同,然后到了零一呢,在这个基础上加了一个四。再就进又加一个四变八,再加一个四变CCC了啊,再加一个四进了一位D0,后面这个四应该不用不用看就是第四。然后第四完了,最后最关键的地方就来了,就是它下一行会怎么分布呢。你看这个是第四,这个第四分布完了过后,它下面的第二行的第一个元素就应该在这个基础上再加一个四,就是第八了。
14:01
那是不是这样子呢?我们来看同学,看是不是第八。是不是第八呀,第八。第八,你看这个下一个元素是第八没问题吧,第八。A依此类推,第八加上DDCD,呃,为什么是一零的呢?因为C加了一个四嘛,进了一位,好,其他以此类推。也就是说我们虽然。虽然我们这个地址看起来好像是这样子换行了,但是本质上呢,它仍然是一排排过去的,就是连续分布。看清楚了没有,好老师就说到这儿了啊,因为因为这个也不难,说白了就是我们的地存在的形式呢,有点像这样子的一个盆,但是呢,它的这个地址是连续分布的,注意及。通过分析弟子各个。各个元素的各个元素的地址是什么样?是连续分布的,而且每次基础上在前一个加一及及什么呢?即在在前一个元素基础上。
15:13
基础上加四。为什么加四呢?因为你这个是int类型的,那你如果是char类型的话呢,对不对,那就应该是加几啊加一,好的同学们,那二维数组的一个基本的使用我们就说到这儿啊,使用方式一就说完了,那下面呢,我们再来看它还有其他的使用方式,我们还有一种方式就是。在定义这个数组的时候呢,就直接给它赋值也是OK的,你看这样也可以。也就是说我们定义一个A4行六列,我直接复制。你看这是第一行第二行第三行第四行对不对啊,这帮我们把词就具体写清楚了,呃如果说呃,你不喜欢这种方式,甚至还可以这样写,你可以怎么样呢?前面写个A40,然后呢,你你也不用换行,你就按顺序啪啪噼里啪啦写就行了。
16:07
这样子说老师那不对啊,你不是有四行六列,这样不写成一列吗?不用担心会自动匹配到各行各列,也就是说他他知道你这个A啊,是四行四列的,他知道。四行四列。然后呢,他在放的时候呢,他把前面的六个放在一组,再把后面的六个再放一组,再把后面的再放一组,再把后面的再放一组,它会自动排列,说这个呢,两种形式大家都可以,这里我就不去用了,好不好,没有没有什么难度,你遍历就行了,遍历就行了,好,这是我们的又一种,呃,就是这这这么几种形式啊,就说大家也可以这样去初始化,也可以这样去初始化,但是呢,注意听讲好,一定要给他写全了,也就说你现在呃这样写当然很很清晰了,就是是一行六个嘛,6666,那就24个,那你如果写一行的话呢,你要跟他匹配,就是也是也是六个一组,你看这个是。
17:10
前六个123456。这是一组,再来一组啊,这个是不是又是又是六个。好,再来六个。是不是这个又又又是六个,后面是不是还有六个一定要给他匹配,你不能说突然少了一个,少了一个的话,它会有一个默认值,来来替换,明白吧,但是我们尽量按按照自己的要求写清楚。好,同学们,那关于我们二维数组的一个快速入门,我们就给大家聊到这里,好,我们板书一下,待会儿呢,我们再说细节的事情。这是讲的二维数组的内容,对不对?好给大家梳理一下。那这块我们讲的是多位数组织二维数组,我们看看我们讲的哪些内容梳理一下,首先给各位朋友先说一下我们要讲的多维数组,只只给大家说了一下二维数组,那么这边呢,有一个二维数组的应用场景,比如说诶咱们将来要去写一些这个。
18:07
游戏对不对。如果你将来要要去做这个游戏啊,这样就会用到我们的这个二维数组。好,我这里把这个图也拿过来吧。把这个图也拉过来,然后这个这边说完了以后呢,是不是给同学们说了一下二维数组的使用,然后呢,给他分析了二维数组的这个内存的一个布局。那使用了,我们怎么说呢?我们先来了一个快速入门,再举了一个案例,画了一个图,是不是像这样子的啊,同学们来走一个,这里呢,首先给大家来了一个快速入门案例。然后呢,我们来讲了第一个使用方法,使用方法呢,这边举了一个应用案例,对不对,好,我把这个案例的呃代码给他放过来,以及他的流程图,好代码演示。那具体来说代码呢,就是在这个地方给大家写进去的。
19:00
是这样子的,同学们,这是我们的代码,那么这个代码呢,我们通过这个地方的代码,我们画出了对我们或者说画出画画出了二维数组的一个内存布局图,这个是蛮重要的,这个是蛮重要的,也就是说你一定要把二维数组在它内存里面的布局情况了解了,那布局呢,这是老师这画的一个图。哎,还有1.1定要清晰哈,就是它这个地址呢,是从这儿开始编号的,那么就连续分布地址。连续到这儿来过后呢,自动换一行。到下面来。地址是连续分布的,再说一遍,地址是连续分布的,那么这个地址相隔多大,取决于你这个类型,如果你是特类型的话呢,那下一个在原先这个基础上加四就可以了。各位,我放在这里了。好,各位同学,那这个就说完了,紧接着我们是不是还给,呃,这个这个就是还说了我们使用方式二,还有一种方式呢,就是同学们也可以在定义这个数组的时候。
20:12
就是在定义这个数组的时候呢,咱们直接给它初始值。这两种形式也是OK的。这两种形式也是OK的啊,这个也可以。对,这个也可以,那具体来说它的用法呢,我就给大家截一个小图过来就行。好使用,就跟全面的是一个方式。各位,那关于二维数组的基本使用,我们就先给大家讲解到这里。
我来说两句