00:00
各位,我们来看一下数组的使用注意事项和它的细节啊,第一个呢,就是数组是多个相同类型的数据的组合,对,呃,一旦数组一旦就是一个数组,一旦声明定义了,它的长度就固定了,不能动态的变化,对,比如说我定义了一个是。对不对,大小为四的,那你就不要去越界使用。不要去越界使用,第二个呢,数组创建以后,如果没有赋值,它会遵循这样的原则,如果是全局数组呢,它会给每一个元素。呃,每个元素默认为零,如果是非全局数组,初始的都是垃圾值,这个时候很你运行的时候很有可能造成程序的异常退出。这个规则跟我们前面的全局变量和局部变量很似很相似,就记住这个规则哈。那么使用数组的步骤呢?第一步我们是定义数组,给数组各个元素赋值,在使用数组也可以一步到位。
01:06
也可以像我们前面的这种方式来玩,就是我在定义一个数组的时候,直接就给它复制也是可以的,好吧,也可以一步到位。也可以一步啊,一步到位,到位使用,就是把定义和使用呢啊,把这个定义和初始化放在一起,数组的下标是从零开始的,不是从一,这点呢,是很多同学容易搞混的啊,不是从一开始。还有一点呢,数组下标必须在指定的范围内使用编译,但是有时候说,诶老师我如果越界了,编译好像也没报错,是的,有些时候呢,比如说你这定一个数组是五,本身你有效的下标是零到四,但是你在用的时候,你这样用说我写一个七,编译好像也没有报错。
02:00
确实是有这个编译手刹不会报错,但是在运行的时候呢,会因为数组越界而异常中断,就是这种可能性是非常大的。对,所以说呢,大家一定要不要不要故意的去越界使用,你的数组是多大,你就在它有效的下边里面使用就行了,不要去越界使用。最后一点我要给大家举个例子啊,C数组是属于构造类型,它是。按默认是传值的,因此当把一个数组传给另外一个函数或者是变量时,把这个写上或者变量。或者。对或者变量。变量,那么这个函数操作数组或者是变量操作这个数组函数或者变量哈。变量操作这个数组会影响到原来的数组。这个呢,我可以给大家画一个图来帮助同学们理解我举个例子。举个例子,这个呢,例子要给大家好好举一举,因为不注意的话,你很容易把这个忽略掉,来我写个例子哈,这边呢,我们就叫detail。
03:09
好吧,就把这个地方详细的说一下。因为这个很容易搞混。来吧,同学们,我们写一个小案例,大家看看这个代码是一个什么样的情况,S Di IO来跟上老师思路,好吧,V的主函数。那我就快速的写一个函数了,嗯,我写一个哈。那咱们写一个V的F1,然后这边我接收一个数组。比如说二位看清楚了。好,然后呢,我这样怎么写呢,我写一个零。给它来一个值吧,给它来一个一,在原先基础上加1R0,不管它原心是多少,我再加一个一,看清楚了吗?好,然后呢,我在这边定义一个数组,看清楚了二位。走起来,然后这边我们的速度假设是一个三大小的好吧,然后这边我给他负的值是345,没问题吧,然后呢,我把F1调起来,把瑞传过去。
04:10
传过去。那么现在我要跟大家讨论的问题是。少了一个分号,我要跟他讨论是分,讨论的问题是现在在这个main函数中这个R。Main函数中这个的零到底是多少的问题,好吧,我们来遍历一下。遍历啊就下啊遍历什么呢?而main函数中的main函数函数。函数中的什么呢?二位,我们来玩一把for循环。I等于零,I小于三,这次我就我省个事啊,我就直接写个三。好,然后呢,Print f打起来,这边呢,我们这样输R,来一个下标给它整出来,摆放D,它的值呢,摆放D,隔一下,好,这边下标为I,然后值为这个没问题吧,同学们。
05:06
好,这一句写完,写完过后呢,我们来一个get char,让它停在这个位置,那上面有个I没有定义,所以说我再定一个I。好写完了,那写完过后呢,我们可以负责任的告诉大家哈。告诉大家,因为你这个瑞传过去的时候呢,他传的是地址,所以说这个。这个AR和这个AR它其实是指向同一块空间的,因此我可以告诉大家,这边输出是什么呢?是四五。而不是345了。说,老师你敢这么肯定吗?对的,我就敢这么肯定,因为我们明白宿主它默认是传的地址。数组默认是以什么呢?是以地址的方式传递。或者说你可以理解成是传递指针,或我们说传递指针就是,呃,传递指针其实就是传递地址嘛,对不对,好,我们来玩一把,看看老师分析的是否正确,来跑一个。
06:07
运行一把,那运行过后呢,我们发现这个结果的确是445。跑起来好,我们看一下输出了,是不是445呢,的确是445,对不对,那为什么它是445呢?我给大家画一个内存图,这次呢,我们画一个内存图就画一次,以后我就不管了,好同学们认真听,那这段代码呢,老规矩,我们把这段代码放到我们的这一个。呃,Excel这边来。看清楚了,这是我们的代码,诶这个这个代码每次拿过来就是。啊,这次我是这样子吧。这次我也不去粘贴拷贝,呃,这样我就直接截个图。我截个图来分析是一样的,好同学们。这是我们的代码。代码图,那么他会怎么来玩呢?各位同学跟上老师思路,这仍然是我们的计算机内存,对计算机,计算机内存那么我们讲过计算机内存呢,有一个特别大特特别重要的空间,就占空间。
07:10
我们仍然用这个来表示哈,好,开始这是我们占空间。站,那么这个时候呢,代码从这里开始执行,对吧,从这里开始执行,好的,它从这里开始执行呢,首先我们我们可以理解成在这边有一个。主站主,这个我们可以认为是个主函数,好理解了哈,这是我们的me。那么它产生一个二过后呢,你可以理解成这有个二,它指向了一个什么呢?OK,它指向了一个空间。对,他之前一个空间,这个空间里面放的数据是什么呢?好,我写一下有三个格子。有三个格子,第一个格子里面放的是三。对,第二个格子放的是四,第三个格子放的是五。
08:03
好的,然后呢,他这边F1把这个传进去,我们知道这边会导致一个心脏的产生。这个能理解哈。好,也就是说这边呢,我们产生了一个新的F1这个站,这个F1这个站呢,它接收到了,呃,它这个瑞是它的行参,也就是这边呢,它也会有一个变量。好,那么这个时候他存的是什么呢?各位同学。他这个地方啊,各位你们可以这样理解。你们可以这样理解,就是这个AR,这个我们可以这样去理解它啊,你你可以这样简单理解就行了,我们画一个示简单示意图,相当于这个A呢,它就直接指向了。这个位置。那有些同学你怎么敢这么肯定呢?我可以把地址给你打出来看。就说这边是有个地址的,大家知道,就是对于一个辩论来说,它肯定是有个地址嘛。
09:00
对,也就是说这个地方是有个地址是比如说0X1122,那么这边呢,它就指向这个地址,好,它一旦指向这个地址,它用这个二零访问的,其实就在这个空间里面的。这个它加一,那相当于是修改的。这个里面的字。当然它修改完它这个地方二零加一,修改完了过后,这个代码就执行完毕,这个当然就销毁了,那销毁完了过呢,你再去遍利这一个main里面的宿主,当然它就是45了,理解了吧,所以说我们说为为什么讲这个东西呢?就是说宿主它默认是传的地子,或者是我们叫做引用传递或者指针传递。那有些同学老师,那你给我证明一下可以,我给你证明一下,看看地址是不是一样的啊来,我们首先在这里面把这个瑞的首地址打出来。PF注意听讲哈,这方还是比较重要的,不要小看这里就二的地址,那么这个的地址,因为数组本身就是地址,所以说你可以直接这样用一个百分号P输出就行了。
10:04
这个我们写上,写上叫命。幂函数中的。中的R的例子是不是输出来了,那现在呢,我在这面也输出来一下好不好,因为我拿到过,我也在这输出一句话吗?这样大家就可以对比了吗?好,希根恩。我为了好看呢,大写,如果这两个地址都是一样,说明刚才老师的分析就是正确的,好,这边写一个叫做F1函数中的二位。地址是不是它也是这个名称,我们重点观察就是这两个地址是不是同一个地址,也就是说刚才老师画的这个图。这边它指向的是不是,呃,0X1122就可以了。它的地址是不是同是用同一个地址,好,同学们我们来运行一下,看看效果是不是跟老师分析的一样好走起来。走起来。那走起来过后呢,我们运行一会,诶代码是哪里有问题。
11:00
好,还是因为这个变量的问题啊,因为变量的这句话,我们因为是定义,所以说得提到上面去,能理解吧,再来一下。运行一把,主要是看地址是否一样哈。好,跑起来过后我们看地址。好,我们我们来看一下,就是main函数里面OA的地址是002FFB10。对不对,F1中的地址是不是也是002FB10呢,大家看这两个,诶同学们看一下这两个地址是不是一样的,没有骗大家吧,你看这个地方的地址。Main函数的地址和F1函数的地址是不是同一个呀,002FFB10002FFB10完全正确,所以说我们这样分析呢,是完全正确的,没有任何问题,好同学们,那关于这一个,嗯,就是这个细节,我们就给他聊到这里,这张是特别重要的啊,这个内存图我也画了,特别重要就在这里。
12:01
一定要认真的体会好,我把宿主的这块细节给大家板述一下。没有什么太多难度,但是呢,一定要有印象,你别说他说老师这个没有难度,我就可以跳过去不行的,诶这个东西应该是二。这边是不是讲的细节,一共有六个细节。有六个需要各位同学注意的地方。好的,板书到这里就完事了,对不对?好比说这里呢,尤其是第五第六个,我们举了一个例,而且呢,还给大家画了一个图放过来。例子在哪里呢?诶,例子就这,是不是把案例翻过来啊,这个对应的图呢,对上面案例啊上面。案例对应的内存图。很重要,这个图你要理解了,那下面这个就很好理解了,对不对,可以这么简单,二二指向它就可以了。好,各位朋友,那现在呢,我把这一个图给他拿过来。没问题吧,同学们放过来。
13:02
把这个缩小一点。缩小一点。好的同学们,那关于那关于就是我们这一个细节的问题呢,就给大家说到这里啊,说到这里大家好好理解一下。
我来说两句