00:00
好,同学们,我们继续来看切片的其他注意的地方,大家看切片,我们这儿出几道练习题,我们讲了切片这么多注意事项呢,我们一直没有做练习题,我们来看看练习题,看这道练习题。同学们看这段代码有没有错误?说这里有一个切片A。他是12345,这个没什么问题吧,挺简单的。这个地方没问题,这里呢,我做了一个切片,但这个切片大家注意看到它的长度是几啊?是一。我给它定那个大小,或者叫长度为一,注意啊,它是一,然后呢,我这输出,诶同学们,我这输出这个来,大家想它是几啊。因为我这make的时候值大小为一嘛,又没给它赋值,肯定这个地方应该输出一个零。没毛病吧,输出一个零,这个是肯定的,说这个是零。诶,这一门。这是领。啊,怎么是你?
01:01
然后呢,我这做了一个拷贝操作,我把这个A。我把这个A拷贝给slash,大家看A呢,有五个元素,而slash只有元一个元素,这样拷贝行不行?这样拷贝行不行,我先告诉大家一个结论啊,这样是可以的,没问题,就是说如果你圆这个slash,它的大小没有这个A大,他也不会报错,他只会怎么样呢?他就会找到第一个元素拷贝给这个slash,后面的元素再想拷的时候,他发现slash只有一个需要拷贝的,他就放弃了,所以说这个地方呢,输出来就只有一个一,但是他不会报错。代码没有错,最后输出的结果,这地方输出的是零,这地方输出的是一。好,这个代码就分析完毕了。这方千万不要认为啊,很多同学可能会认为说,诶老师你这个slash它只有一个元素,它的大小是一,而A的大小元素呢是五。
02:00
是不是往里面考的时候他会爆。大小不够啊,不会的。那不够就只拷贝一个就完了吗?对不对,所以说同学们这段代码是没有错误的,最后结果这个地方输出的结果说一下。这个地方输出的结果就是一个一。明白这个地方的结果是零。没有报错,大了不会报错,小了也不会报错,同学们可以去试一下啊,可以去试下,好,这是我们的一个切片操作的又一个细节,就是说明好,我把它呢给同学们放到这里面来。切片操作一个细节。这是第几个细节了,第八个,这第九第八个细节了,对不对,第八个细节。好,我叫关于。关于。关于拷贝拷贝的一个细节说明。我叫注意事项吧。
03:00
好吧,这没问没问题,那么这里面呢,我们把这个结果给大家放到这来。刚才老师分析的这段代码。说一下。好,我们的这个结论是,上面的代码是没有错的。同学们如果有所怀疑,你们可以自己在Vs code里面运行一下说明。上面的代码没有问题。上面的代码啊,没有问题啊,是正确的。是正确的,可以运行。可以运行啊,可以运行最后输出。最后输出是什么呢?输出的是这个东西。好了,因为你在拷贝的时候只有一个,一拷贝给他了,二没有机会拷了,因为二需要两个空间,那是它只有一个对吧?好,这个地方大家注意一下,好,接着呢,我们再来看还有一个需要同学们注意的地方,就是哪里呢?看这里。
04:01
切片是引用类型,所以在进行传递时,他会遵守引用传递机制。大家看两段代码。低端代码看这里。这儿有个主函数,它定义了一个切片。啊,生命的一个切片,这个时候这个切片是不能用的啊,这个切片实际上是没有空间。好,紧接着它这有一个数组,大家看这是个数组吧,这个数组是12345。有五个元素的一个整形数组,紧接着它做了一个切片。他让这个slash指向了这个数组。这个用法大家看了没,没问题吧,这可以的,好。紧接着他把这个slash又交给了SLASH2。那也就是说,S lesss2和s less都指向了谁?这个数组。能理解吧,这个这个可以理解的,就是说这两个呢是诶。这两个呢,现在目前是。
05:01
哎呀,讨厌这个啊这块。怎么样?这个地方大家再看一遍啊,这是这两个时代,12和十代都指向了这一个,呃,数组好,紧接着它十代二。他通过代二去改变这个十了,他现在请问的,他要求问的问题是代二输出是多少,代输出是多少,瑞输出是多少。大家想一想。其实这个我相信大部分同学都应该能够得出这个,得出这个结论了,那这个地方输出的都应该是十,第一个元素是不是都变成十了呀,因为是引用了,就是说slash和SLASH2其实都指向这个二了,因此呢,这个元素已经被改成十了,234仍然不变化,对吧?所以说这段代码我们可以来进行测试。结果我们可以在这写一下。这地方应该输出是。呃,十。
06:02
二。三。四五好,下面这个呢,也是输出十二三四五在下面这个呢,仍然是输出十。2345,好,我们来跑一跑对吧?口说无凭,大家呢,可能有有点怀疑,这个到底会不会?呃,跟老师是不是分析的一模一样。那么我这里呢,我们来新建一个文件夹,我们来测一下。好,新建一个文件夹,叫做slash的一个测试。SS的一个练习exe。Exercise。CI,好吧。我们新建一个。文件叫main。点构。没顶过。是这地方没点过。
07:01
好,那这里面呢,我们老规矩,给他打一个包包,Package。Package。每。然后呢,这边我们给他引一个包import。对吧,Format这为什么多了一个小点对不对,去掉。然后呢,做一个主函数。Function me。包起来,把代码往这一粘。没问题吧,我们来跑一跑,看看跟老师分析的是不是一样的,那有个问题。好,代码有没有问题,大家看一下。好,没问题,我们在运行了啊。CD点点CD到我们的slash一个练习里面去slash。对吧。走,我们go run,刚才写的面点go。我们看结果是什么。结果跟我们分析的是一样的吗?大家发现跟我们分析的完全一样。对吧,诶这是一样的可以。
08:02
可以的,没问题,跟我们分析完全一样,好,这个结论就是正确的。我们再看第二个题。第二个题,第二题呢,它是这样子的,他说这有一个slice。这是个切片,然后打印这个切片,这地方打印的肯定我相信同学们知道应该打印出来什么吧。是不是就是1234。就这样打嘛,然后呢,他把这个切片传递给了一个函数,这个函数呢,也是一个切片。看到没有,也是一个切片,然后呢,它在这个这个函数里面,把slash这个第一个元素改成了100。这个时候他问在这个主函数调完这个函数以后啊,他在这个主函数里面去打印这个flash,请问这个时候这个flash是输出什么内容。四。还是原来这个值呢?还是有所变化,他想这么问你。我们刚才讲过slash它是引用类型,那既然是引用类型,它这传的呢,其实传的是个地址。
09:06
那也就是说这这个text里面这个时代和外面这一个主函数时代是同一个时代。可以想象那个内存空间。也就是说里面这个slash其实是指向了外面这一个slash,因此你在里面的修改。这个地方修改。这里的修改会影响到外面的。这里修改SLASH0。会影响。会影响这个时参,就是你传进来这个不叫时差吗?会直接影响时参。会干什么呢?会影响。时差啊,或者叫会改变时差都可以。那我问大家哪个是13?实参是不是就是这个东西,就是你,你从这传进来就叫实参吗?这个呢是行参。
10:00
那传进去我通过这个改变了,那外面这个应该改变,所以说它这应该变成100。二。三四完事。那是不是这样子的呢?我们来运行一下,看老师分析的对不对,好,我把这个题就直接改了啊同学们我也不啰嗦了,我直接改一下。改了过后呢?然后我把那个T的函数也粘贴复制过来。给大给大家运行一下看效果。跑一个。没问题吧,同学们。现在呢,我们来运行一下,看看效果怎么样。我们发现运行过后这个结果应该是跟我们分析的一模一样来看这里。对不对,是不是改了呀。也就是说你因为它是引用类型嘛,所以说你在函数内部的改变会直接影响到函数外面的这个实际的参数。这里我就不再多说了好吗?结果是这样子的,标红一下。
11:04
分析好,同学们,这是我们讲的切片的又一个注意事项,就是引切片在进行函数传递的时候,它遵循的一个机制。好,我把这个呢也给同学们拿过来,这第九个细节。好,关于它的一个细节呢,诶,我们呢,也把这一个案例给同学们复制一下。好,这个案例呢,就在这儿。对吧,就在这里。大家注意一下结果,刚才老师已经分析了一个是这。还有就这个地方对不对,希望大家好好的去理解一下。没问题吧?好,同学们,这个地方是给同学们讲解的,我们我们这个切片使用的。又一个注意事项。
12:01
又一个注意事项,那下边呢,就是另外的东西,我们放到下一个章节再去为大家讲解这两个题,同学们好好的理解一下好不好,就是一个切片在传递的时候。拷贝需要注意的地方另外一个,当切片作为一个实参传递给一个行参的时候,它在使用的时候需要注意的一个问题就是引用的一个机制。好,同学们,那关于这块我们先说到这。
我来说两句