00:00
那我们现在来总结一下结构体和结构体变量的区别和联系。好吧,我们来看一下,通过前面讲的案例呢,我们可以看出结构体实际上是自定义的一种数据类型,这点就把它的本质提取出来了。就结构体是你自个儿定义的一个数据类型,它代表的是一类事物,比如说猫猫类结构体变量实例是一个具体的,实际的代表一个具体的变量,你比如说前面写的代码,大家看这个呢,我们这定义了一个结构体,其实它是代表的一类。一类事物就是猫,对不对?但是当我们这样做了一个动作过后呢,这个K1就是一个实实在在的一个个体了,也就是说它是一个结构体的变量,具体的一个对象了,能理解这意思吧?好,这块呢,请大家一定要注意,好吧,这块也比较简单,就是说你就记住结构体是一种数据类型,而它的变量是它一个具体具体的一个实例就OK。
01:01
好,这块呢,我们把它罗列到我们的笔记里面去,好吧,也比较简单,所以说老师呢,提一嘴就行了。好,我把这稍微的整理一下。我们总结一下啊,一个。两个好,把它整理一下。那么这是我们所说的结构体和结构体变量的一个区别,那下面呢,有一个非常重要的知识点,什么知识点呢?就是我们要把结构体的这个内存布局给大家画一下。大家看,打开我们的幻灯片,我们发现这里需要给给大家探讨一下结构体变量在内存中的布局,在内存中的布局,这样写啊,内存中的布局就可以了。那比如说我这里有个猫猫,那么这个猫TD1它在内存里边,它是怎么存在的呢?来我们画一个图,这块比较重要,希望同学们注意听。
02:00
来,我把它专门的说一下,这个是个重重要点,重要啊OK。好,同学们,我们把它呢给整理一下。对吧,好,我们就以这个为例,就以哪个为例呢?咱们就以刚才画的这个猫。你不是这有一个这有一个cat,呃,Cat一个结构体吗?那在这里我们是不是创建了一个猫的对象实例,对不对,那现在呢,我们就来看看这个K的一,他在内存里面是如何存在的,好吧,在内存里面是如何存在的,好老规矩,打开我们这个Excel表。在这里呢,我写上一句话,这句话就是我们写下叫cat。就是结构体,结构体实例或者叫变量,变量在内存中的布局,也就是说他在内存里面它是怎么存在的来吧。
03:00
我们整理一下。好的,那首先呢,我把这一段代码。我把这段代码先放到我们Excel表里边去。这是我们的代码,是不是先把它放好?没地吧?好放好以后呢,我们给它插入一个内存图。好,同学们,这是我们的内存。比如说这是一块内存,那么为了待会好看呢,我把这个内背景颜色换成一种比较浅的颜色,好吧,这样就比较好看,然后这是我们的一块内存。内存诶怎么是。这个颜色。我要是黑色才对,对不对,黑色好,这是内存,那么我们看到这有个K1,当我们的代码执行完这一句话的时候,就是直接执行完这一句话时,我把它标成绿色,就是VRK1K的时候它会怎么存在呢?那它会存在什么形式,跟我们这个结构体本身的定义是密切相关的,也就是说它存在的形式呢?跟我们这个结构体它本身的这个数据类型是有关系的。
04:15
先把这块也拿过来,放在一起来讲解。因为你这个变量,它本身就是它的一个实例嘛,对不对,所以这样看。好。当我们执行完VR开的一。Cat的时候,在内存里面它是这样存在的,注意听我讲。首先呢,会有一个变量名,对不对,开一。好,我把这个K1先拿到内存里面去,那么这个变量它会指向哪里呢?它会指向一个空间,好,这个空间呢,我用黑色表示好吧。那这个空间有几几部分呢?大家看它有三四个字段,所以说我们要画的话,应该是这样画的。没问题了。这是一部分。
05:01
好,我们再来,这是第二部分。我们再画一个第三部分。也就是说它在这里面呢,存在有四个部分。啊,这个地方第一个部分就是name,我把这个也写出来。好,这个地方,这个空间对应的是name。我就以此类推,第二个空间呢?对应的是我们的age。对吧,Age。第三个,第三个下面这个空间。对应的是什么呢?好,我再把它放过来,是什么呀?是我们的color。你看这方对应吗?看一下第四个下面这个空间呢,我们认为是。他的这个hobby,他的爱好。So by,好,当我们做完第一句话的时候,其实这个K啊,各位同学,它已经指向了我们这个结构体。没问题吧,也就是说它已经指向这个结构体。
06:04
好,我画一个画一个这个这个这个这个颜色啊,执行这个结构体,那么这个结构体做的时候,它有默认的值,比如说这个name,你还没有给它赋值的时候呢,在这地方其实它是一个空的字符串。看到没有,它是一个空的字符串这样子的。这是一个空置符串,放进去了,再看这里,那这个地方是什么呢?H它默认是零。就这个地方是零,因为你还没复制color呢,Color因为是字符串,所以它也有一个空字符串放在这。对吧,那下面还有一个好,下面还有一个,下面还有一个hobby hobby你没有赋值,它也是空字符串。也就是说当我们,诶这张是怎么回事啊。往下面拉一下,就就是当我们去创建生命的,或者叫定义了一个CAT1的时候,其实在内存里面就是这样子存在的了,那这个K1它自己有没有地址呢?它也有地址,虽然它是一个结构体,它有它自己的地址,我们把它地址也输出来给家看一下。
07:06
那走一个。好,我们看一下啊。写到写到这个地方来吧,我我们写到上面去好吧。Print f。我们输出这个结构体变量本身的地址,比如说K1的地址是等于,同样我们用这种方式输出。好,既然是地址,那就开一。又一个取止符来,我们跑一下,那为了好看呢,我是不是应该斜杠一下,对不对,换一下。来,走一个。我们可以看到它本身确实是有一个地址的,这个地址就他。看到没有?他的地址就这个好,所以说我可以把这个地址呢,也拿过来大家看一下。通过这个图,你们有没有发现老师写的画的这个图是直接让他指向这的,那说明我们这个K1是什么类型的?
08:00
是引用类型还是?之类型。我直接指向它的,所以说从这可以看出来,K就是结构体,它其实是指类型,而不是引用类型,这一点希望同学们要注意区分,因为有很多的这种啊,编程语言里面呢,它它结构体,它不一定是之类型。对不对,但是在构里面呢,它的结构体其实就是一个子类型。因为它是直接指向这个它的数据空间的,并没有先指向一个地址,再让这个地址去指向一个数据空间,能理解这个图吧,这个图其实挺重要对不对?好,等着他下面做了一个k1.name的时候呢,他就通过这个K1访问到他name这个字段,然后给他取了一个名字叫小白,那就写。小。好,那这块呢,我就提上去了啊小白。OK,这地方怎么回事,这个。挪一下吧,好吧。
09:00
然后呢,他又执行了一个K1.h等于三,那就把这个变成了三能理解,下面呢,他又把这个K1.color变成白色,那就说这个地方是空字符串就变成了什么白色。能理解吗?好,紧接着它下面写了一个hobby。吃鱼,那这地方就改成了吃。对吧。吃鱼啊,就改成这个东西了。好吧,能能理解这个意思吧,好,哎,这个地方我这还不好写啊。那就那就那就意思就意思意思意思就行好吧,因为我我写的这东西太太长了,他就看不到了词语,好等到他执行完这一段代码以后,哎,执行完这段代码以后,把这句话执行完了过后,它的内存就变成小白三白色和吃鱼了。因为你代码就是要去执行的,好,从这个图,我希望同学们领会到这一个结构体变量在内存里面是如何存在的,注意听啊,如何存在的。
10:03
好,嗯,从这段我们至少得出一个结论,就是。当我们声明一个结构体变量时,数据空间已经有了,而且它在你们赋值的时候呢,它每一种数据类型的默认值也给他了,这是第一点要注意的,第二点呢,从这个图我们可以看出来,结构体变量或者叫结构体,它是此类型。就这两点好吧,好,所以说我现在呢,就把这个分析的内存图呢,给大家复制到我们的笔记里面去。大家认识一下。欧了。这个图很重要啊,同学们一定要把这个图好好的理解一下,这是重要的,OK。我把它提出点一下。好,把这一块放在我们的笔记里边去。这个图一定要把它拿下啊,同学们好,那关于这个结构体和结构体变量的区别,以及结构体变量在内存里面的布局呢,我们就给大家介绍完了,基于这个图我们就会有很多细节展开,对不对?好,那这块我们先给大家说到这里。
我来说两句