00:00
我们系统的来看一下数组的定义,还有它的一个使用,那首先我们看一下数组的定义,一个完整的定义是这样子的数据类型。然后这边是数组的名称,一个中括号,中括号里边呢,写上数组的大小,比如说int a5,这就代表什么呢?代,这就代表我定义了一个数组,说明一下这个A呢是数组名。类型是什么呢?类型是int,那么这个中号这个五表示它的大小。表示。诶是它的大小,也就是说我这个A这个数组呢,它可以存放五个int这样的数据及什么呀,说一下。及。这个A数组,数组可以存放,可以存放五个。啊,但是最多可以存放啊,你你少存放几个也无所谓,最多这样写。最多。
01:01
最多存放五个int类型的数据。Int类型的数据。你不能放别的数据类型,因为它这规定好了是int,你放别的呢,要么有精度损失,要么就直接给你报错,那么这这是它的一个数组的定义,另外呢,数组的内内存图呢,大家稍微的看一下,你可以这样理解A。是我们的这个数组的名称,它呢,干什么呢?它指向我们这个数组的首地子。对。那指向这个数组的首地址过后呢,后面就可以编号了,这是数组里面的第一个元素。这是第二个元素,第三个元素,第四个元素,第五个元素,以此类推,你可以怎么理解这个东西呢?你可以这样理解,这个A呢,好像是一个楼层的楼楼层号。而我们这个里面的0123是表示我们这楼层的第几个房间,这样就比较好记了。
02:02
对,就好像说A是一个楼层,楼层里面的第一个房间就是放我们的第一个元素,第二个房间放第二个元素,第三个房间放第三个元素,第四个第五个,以此类推。对,所以说这样理解呢,就比较容易理解,还有一点我要说一下,就是这个数组呢,他在内存里面这个地址啊,是连续分布的,就是说A0这个地这这个元素的地址。加上一个int的字节数,因为你是int嘛,加上一个int,比如说这个就四个字节,就加四个字节过后呢,就是A1这个元素的粒子,我我多说一句好不好,大家认认真听一下。就是说下,呃,说明啊,对这个进行一个说明。第一点呢,就是宿主名。数组名就表示就这个数组名就。
03:01
就。指向了或者就代表吧,就代表代表什么呢?该数组的首地址。守弟子即谁的地址呢?即A1的地址。对,这样大家理理解了吧,就是数组的名称就代表这个数组的首地址,即A0 a0就是第一个元素的地址,这是对应的,第二个呢,还要注意就是数组的各个元素,数组的各个元素是什么呢?是连续分布的。连续分布的。啊,怎么理解这句话呢?怎么理解这句话呢?我我这样说啊假如即这样理解假如,假如A0A0的地址这样注意听啊,A0的地址为0X1122,假如这样说的啊,假如要写错了,假如。我改一下叫假如。
04:00
假如A0的地址是这个,那么A1的地址就是什么呢?A1的地址就应该是0X11221122加上一个int的大int的这个字节数。而int的这个占用的字节数,字节数。而也大家知道,英特尔一个直接数不就是四吗?那也就是说,呃A呃,这个地方有点,把它放小一点吧。放小一点啊,同学们不影响大家看就行了,就是相当于是A这个。这个A0A0A0的地址是他,那A1的地址就是什么呢。就你可以这样写,就是A1的地址,A0的地址。A0的地址。加一个int的直接数即等于什么呢?即0X1122加一个四等于多少呢?那就是等于0X1126。
05:00
啊,1126这样子理解。你理解这个意思了吧,那当然了,后面的以此类推,后面有以此类推,就是说你你是0X112加一个四,就是0X1126嘛,126,这个讲二进制,讲16进制,我们讲过,那后面的呢,以此类推,后面。后面这个零,A1 a2的还有A。A2的地址就应该等于A2的地址就应该等于A1的地址。地址加上什么呢?又加上一个int的字节数。直接数还是四个啊还是四个,就说这个就是所谓的连续分布,那如果这样子算的话,A1的地址你看A。A1的地址。是这样得到的是吧。A1的地址是这样得到的,那么A2的地址呢,就是这样得到的。
06:00
对。这样得到的,那这样的地,这样的地址就应该是什么呢?0X1126再加一个四,那就变成多少了呢?那就是0X11。二几呢?A啊好,其他以此类推。以此以此类推,你理解这个意思了吧,这点其实挺重要的,因为这里面呢,它体体现出我们数组的各个元素是连续分布的这个特点。对,我这打个等号啊,Ae的地址等于这么多,这这等号就关上了,好其他我就后面需要用到的地方,我再给大家再再回头再去加强一个理解,好这是数字列,那么这样子我们来再使用一下数组,访问数组的元素呢,它是这样访问的,数组的名称下标。也就是说,如果你要访问A数组的第三个元素,用的是A中括号二,因为什么呢?因为它的下标,注意它下标呢,下标是从零开始计算的。
07:09
开始计算的,就是不像我们中国人,我我们中国人说,哎,下边唯一就是第一个元素,但是老外呢,他一般是从零开始计数的,为什么呢?据说是这样一个原因,因为外国人的房间呢,它都有个地下室,说这个地下室呢,他认为是零层,上面这一层呢才是一层。那这样算下来,其实这个楼层的真正的第一层其实是地下室,他下标为零,这样这样推的,老外是这样推的,所以说外外国人习惯习惯从零开始标号。这个大家知道就行了,好不好,也不要在这纠结了,那现在看从终端循环输入五个层级,保存到double数组中并输出,我给大家把这个案例给他写一下好不好?这个题并不难,我们来完成一下。比较简单哈,来各位朋友,我现在呢,给大家梳理一下。
08:01
那现在呢?我们整一个小案例,这是数组的又一个小案例,R02,好吧,R02,同样我们把这个后缀。给他改一下。来跟孙老师思路。跟上老师思路,Include ST dl。对,然后呢,写个贸易的,我们的主函数需求拿过来。需求拿过来居然说需求是他。那现在我们就来玩一把呗。第一步,我们先定义一个数组。这个数组呢,它是double数组,那就这样这样定义了double对不对,数组呢,有几个空间五个好就定义好了,然后呢,我们用一个for循环来输来接收,好,我现在写一个for循环。哦,我们把数组的大小也算出来好吧,数值大小lengths r length等于是不是我们前面已经已经玩过这个东西了,应该怎么写啊?Size of,然后是这个是数组的总大小,然后呢,Size of。
09:06
Set of什么玩意儿呢?Double,那也就是说如果你将来这个是int,是一个int的数组,那你这个地方就应该填的是int,能理解吗?如果你是double,那这边就是double,为什么呢?因为你你这个每个存的数据的字节数肯定要影响到整个这个数组的大小嘛,这肯定的,这这稍微绕的过来都都能绕过来,你这个都理解不了的话,那就别学,变成了那波循环开始了,那么我们这边同样定义一个变量I。I开始走,I等于零,I小于or,因为我们下边是从零开始的,所以说最后这个呢,其实你是访问不到的,比如说你这边是五个五个元素,其实你最大下边只有四,而不是五,明白明白吧,所以这这个地方千万不要写成等号。写成等号的话,你会出现一个数组越界,I加加,好,来,我们提示它一下PF。
10:07
走起来说,请斜杠一下。请输入。一个小数,好吧,小数。那么你输入一个小数的话呢,我们怎么输入呢?SCF。CF。那这个小数我们怎么来搜,是不是以前讲过很多遍啊,哎,这样输的一个百分号LF,然后呢,地址符对不对,那这个地址你要输到哪里去呢?输到这里面去的,对第几个元素呢?I。这个能看懂吗?因为你这个I在不停的变化,是在访问你,因为你的I变化才能访问到对应的这个元素,刚才不是画了个图吗?对不对,你随着你的这个I的变化,你才能找到对应的这个空间,才能把数据放进去吗?能理解吗?啊,这个应该不难哈,啊就放进去,放进去过后呢,这就OK了,来一个就放一个,最后我们输出一下。
11:05
输出呃,输出整个整个数组。出整个数组呢,也很简单,我们在负循环一下就可以了,那这地方为了看到这个效果,我们来做一个间隔符号,写个N。打一个。间隔的符号,来,我们把它再输一把。对,那这个时候呢,我们输的时候就这样输了。我们把这个数组输出来这样说哈,各位同学看一下,就我们这样子打一下百分号D表示第几个元素等于百分号点2F,然后呢,这边我们下标呢,就应该对应I值呢,显然等于的是就它能看懂吗?啊,为了好看,我们来一个空格好不好,来一个空格,最后我们get下。好,再来一个get,为什么要两次get下,我不解释了,第一个是过滤,对不对,过滤这个回车。
12:00
过滤回车。好,其他这个才是暂停,好同学们,那现在我们代码就写完了,我们看代码有没有问题,来吧,同学们,我们先来生成一下。看看代码有没有毛病。如果没有毛病,我们就可以开始测试了。好的。现在发现没有问题,我们运行一下。那运行呢,它说请输入第一个小数,我们就输个1.1。第二个小数3.4,第三个小数九九十点二,第是一个小数哈,90.3。最后一个小数,因为我输五个小数就没有了,89.8回车。好,同学们可以看到最后输完了以后呢,我们这个数组也输出来了,分别是1.10 3.409 10.20。90.3好,89.80正确。这就是我们的这么一个小案例,大家看看能否理解,能否理解好,最后呢?
13:00
这个说完过后,我们再来说一下这一个数组,还有一点需要大家注意。对于在C语言这个数组呢,它初始化数组的方式有三种,我给大家整理一下,这是一种。这种是不是我们在前面讲这一个养鸡问题的时候,就这样完成的,先定义再初始化,这是一种,还有两种呢,我给他说一下就行了,大家一看就明白,就是我们也可以这样来玩。就是我定义一个数组过后呢,直接负组这边有有有一个三,就说给三个数,还有一种方式,如果是默认直接给值的话呢,咱们这边这个这个中括号里面可以不写,那么编译器它会推断出来你有几个元素。啊,就这两种方式都行,对,我给他写到这吧。给他写到这好,为了为了明白呢,我写到这儿还有定义数组的,呃,几个方式写到这。啊,定义数组和初始化。
14:00
初始化数组的方式还有这么几种,我给他写一写就可以了。比如说R2。好,这边呢,我们写三,然后直接赋值123,好,比如说第一个给的是十,第二给的是20,第三个给的是80,啊这是一种方式。可以的,那么如果说我们在直接直接给它赋值的情况下,就是说我们在定义这个数值的时候,直接赋值,你也可以把这一个中括号的大小省略。这样写也行,比如说我现在又给三个字,但是这个中括号就可以省略也是可以的啊,比如说这个给的是100啊,这个是给的1220,这个是800。可以,这两种方式大家知道就行了,也很简单。就是我这加一个加一句话就是如果,如果在定义时,在定义时直接。直接。直接就指定指。就指定值可以省略,可以省略数组的大小。
15:03
因为这个时候呢,编译器它会自动判断哦,你这有三个元素,那呢就应该是三。二三好,这是。呃,第这这是两种,再再加上前面的那种方式,比如说先定义再给值的话呢,就一共是三种,也就是我们这整理的三种初始化数组的方式,理解了吗。好,各位同学,我现在呢,把我们刚才讲的内容进行一个简单的梳理来看一下。刚才我们讲的是什么呢?我们讲的是数组的定义,还有内存布局对不对,梳理一下。这些都不难哈,你要说这个难度有多大,一点都不难,对不对?数组的定义和它的内存布局梳理一下第一个数组的定义拿过来。放这。数组定义数组定义说完了过后,是不是我们画了一个数组的内存图,并说明一下数组在内存中布局的一些特点,就是它是连续分布的。
16:03
放到这里来。那具体来说呢?这个图我就直接给同学们板书过来。就这个图。你可以把我们的宿主想象成是一个房间或者是一层楼,对不对?好,这里有个说明。说明呢,我这里整理了这么两点,很重要的两点。给大家板书过来。OK。要编一个号哈。编一个号呢,便于大家的一个阅读。就是这两点。把这个拎到上面去。叫连续分布,第一个宿主名就代表宿主的首地子。还有一个数组的各个元素是连续分布的。这点必须明白。那这个就说完了,说完过后呢,我们继续往下面是不是还讲了一个什么呀,还讲了访问数组的,呃,这样几种方式是不是好放在这好吧。访问数组的方式呢?是这样,访问的数组名下标。
17:01
然后我们写了一个快速入门案例,这个案例呢,就是我们从终端输入五个成绩,然后呢把它保存到double数组并输出,这个案例是在哪里呢?是在这。好,各位同学,诶,不是这了,是不是这这个地方啊,对,是这个地方,我给大家板书过来。直接给他板过来好不好,不难。说完这道题过后呢,我们又给大家聊了一下,就是三种初始化数组的方式。诶,这个呢,大家应该需要有个印象,不然的话,你看到别人写代码的时候你看不懂了,那我把这个图直接搬过来就行了。搬过来就行好,不难。好,各位同学,那关于我们数组的这个定义,还有它的一些使用的特点呢,就给同学们讲解到这里,大家好好的理解一下。
我来说两句