00:00
那各位同学,我们这里呢,再给大家把前面使用这个切片的方式一和方式二的区别再给大家总结一下啊,因为这个呢,是一个经常用来做面试的,就是一定会有面试官问你。就说有看你有没有用过,或者说有没有理解这里面的区别呢,他是经常用这个来做一个考点来考察大家的。大家看一下,嗯,方式一是直接引用一个数组,这个图呢,就是类似于这个图。啊,这个不是这个图啊,就是类似于哪个图呢,大家看到类似于我们在笔记里面画的这个图。对吧,就说它实际上这个切片里面有三个部分,其中第一个部分呢,它指向了它引用数组的第几个元素的地址。后面呢是长度和capability,这是这是我们第一种方式的这个切片的内存图,那如果是如果是第二种方式呢,它是这样子的,就说。
01:08
第一个,第二第一种还有一个特点是宿主是事先存在的。这个数组它实际上已经有了程序员是可见这个数组的第二种方式呢,是通过make来创建,欺骗make也会创建一个数组,也就说make本身它还仍然是创建了一个数组,但是这个由切片在底层维护你这个数组。这个数组没有名称。没有名称程序员是不可见的,Make创建的这个切片示意图实际样子大家看它仍然呢,你比如说make一个int这样的一个切片。四是他的认识,那你这样一做的话呢,同学们可以看到,在他这方仍然是有一个例子。对不对,是不是地址,它仍然会有一个长度,仍然会有个capability。
02:01
这个时候呢,它的嫩和capability是一样的,这里面这个指针它指向哪里呢?这个是指这个画的不对啊,应该是指向。第一个元素啊,刚才这个这个这个画的有点不对,应该是指向第一个,因为你这个不存在。不存在说切到第几个元素嘛,那你默认情况下肯定是指向你这个数组空间的第几个元素,第一个元素。对吧,但是呢,你要把这个数组这个元素,这个地址打出来,你只通过flash来取了,能理解吧,所以大家看是这么一个情况,这个它这个仍然是对应一个数组啊这样这个数组呢,是这样一个数组,就是老师写的是。Int这样的数组。然后呢,你这地方这个切片的第一个部分就指向它内部创建的这一个数组的第一个元素的地址。所以说我们从这帮我们可以看出来它的区别,其实说白了两点,第一点第一个就是第一种方式,数组已经存在,然后程序员可见,第二种是呢,Make帮你创建数组,底层维护,程序员不可见。
03:10
那你要访问这个make出来的数组,里面的元素只能通过什么呀来来切,所以说别人面试官问到你这个问题,你就按照老师总结的这么几点给他回答,怎么回答,你告诉他第一个方式是直接引用数组,数组已经存在,程序员可以通过数组和切片都来访问这个。数组,那么第二种方式呢,是通过make来创建切片。也会创建一个数组,但这个数组是由底层维护程序员不可见要访问数组,访问这里面数数据呢?只能通过切片来访问这里面的元素。只要这样回答就可以了,好,同学们,这个方式一和方式二的区别,这个面试题呢,我们就给他简单的说到这。尤其是这个内存图是怎么画的,好吧,我把这块呢也给大家整理一下。
04:01
相当于说还是属于他的一个使用。好,我整理到这。对吧,方式一和方式二的一个使用的一个区别。那关于刚才这个整理呢。我们就直接。把这段话啊,把这个图片和文字呢,给大家整理到这里。好,板书一下。OK,那这个呢,就是我们的一个面试题,方式一和方式二的区别面试题。
我来说两句