00:02
结构体和结构体变量的区别和联系,给各位同学讲解一下。前面呢,我们给各位同学说了一下结构体的快速入门使用。这里呢,我们需要给大家做一个解释,就是结构体和结构体变量的区别,以及他们的联系,我这里总结了几句话,大家认真听。通过上面的案例和讲解,我们可以看出。结构体是自定义的一种数据类型,比如说前面我们讲的structure cat。这种数据类型呢,是我们程序员自己来定义的,所以说我们叫做自定义数据类型,也叫构造数据类型。它本身表示的就是一种。数据类型就是说它本身就是一种数据型,那结构体变量代表的是一个具体的变量,好比我举个例子,比方说同学们看这里。
01:00
比方说同学们看这里啊。我这里有一个int。NUMBER1。Int number1,那怎么理解这个东西呢?是不是这个对于我们来说是非常非常简单的int number1,如果我们说这这样理解int是什么呀?是数据类型,能理解数,Int肯定是一种数据类型嘛,整型,而而什么呢?而我们NUMBER1是什么呀?是一个具体的变量。什么变量呢?是一个int变量。是不是一个道理,是int变量?这个我相信同学们都能看懂,各位同学我们再来看下边cat cat1这个又怎么理解呢?你要这么理解,你可以理解成cat。哦,你可以开,当然有些有些同学说老师我把带上也可以说cat是什么呢?是结构体验数据类型。
02:00
它也是一种数据类型,看的是一个结构体数据类型,而什么呢?各位,而我们的K1就同学们看到K1是什么呢?是一个变量,什么变量呢,各位。这方要说清楚了,它就是一个K,或者这样写structure k的这个变量,当然你前面加不加这个structure别人也知道,因为别人知道K呢,就是一个结构体。对,所以说这样理解,K1是一个K变量,这样大家一比较就出来了,就好像说原先呢这个int,现在变成了structure cat,只是这种数据类型呢,是什么呀,我们自己定义的,它更加的复杂,更加的综合。这样去理解,相信同学们理解起来就比较容易了。第三点,我们再说,你还可以这样理解。你可以理解K就好像一个模板。
03:02
定义出来的结构体变量都含有相同的成员。为什么有相同的成员呢?你比如说前面我们讲的对,你只要创建一个K的。变量它就拥有了三个成员,大家都有,你有我也有,就好像这你开的一有三个这样的成员,我开的二呢,也有三个这样的成员,明白这个意思哈,所以说我们说它有相同成员,也可以将结构体比作一个图纸,将结构体变量比作一个零件,根据同一张图纸生产出来的零件的特性都一样的。对不对,就像我们这有一个模板,哎,有个模板,根据这个模板呢,我们可以创建很多很多的变量,就这意思。那这样子呢?我们有必要再给同学们画一下结构体。变量咱们就不要提实例了,结构体变量在内存中的布局,我们每次讲一个新的知识点,是不是都给大家分析了一下内存布局啊,那结构体呢也不例外。
04:08
我们需要给各位同学讲一下结构体变量在内存中的布局,就以刚才我们讲的这个小猫结构体变量为例来讲,那大家看这里有一段代码,我们来看看它对应的,对它对应的这个。内存布局是个怎样的情况?打开我们的图解。打开我们的图解,我们来画一下吧,我们来看看到底他在内存里面怎么长呢?诶只要把这个搞懂了,后面的一系列的内容呢,就相对轻松一点。比方说我这里有这么一段代码。好,我倒成这个颜色哈。那在内存里面它会怎么生成呢?好,我们仍然是老规矩,画一个计算机的内存。好,内存就是我们的内存呢。
05:00
计算机内存这个内存里面呢,咱们是肯定是有空间的,对吧,这个空间在在哪里无所谓,可能是在堆里面,也可能是在站里面,我就画到这里来,因为主要是看你怎么去放的,我就这块是我们的一个内存哈。这这个蓝色的,那这样子我们就,诶这样子我们就不要拆了。啊,就这样子就可了,好这边就会产生一个K1这样一个变量,它指向一个什么呢?诶显然K1呢,它指向一个空间。它指向一个空间,那么它指向一个怎样的空间呢?好,这个空间跟以前长的呢,稍微有点不一样,诶大家看原先呢,我们指向一个int。呃,那就是一个特,现在呢,这个地方,这个空间里面呢,将会拥有三种。哎,会有三个。三个什么呢?三个成员。这第一个第二个第三个,诶这样知道老师要怎么画了吧。这样子。
06:02
那也就是说现在KD1呢,它指向这个空间。这个空间里面有三个成员,第一个成员放的是什么呢?小白。理解哈,第二个方程是什么呢?第二个方程是一个二。对,第三个放的又是个小白。好简单的A,白色啊白色。白色。白色,那具体具体来说就这样去理解就可以了,当然因为这个地方呢,这个name和这个color呢,因为它是指针,所以说准确的讲,它这地方其实是这样这样这个地方它放的是个指针啊,这样这样理解更好啊,指针。指针有一个指针一就是什么指针呢?就是恰恰新这个指针。这边是一个char的新这个指针,这边放的是什么呢?啊,也是一个圈的新指针,这边放的是什么呢?这边放的是个二,这个就直接可以放一个二,它是一个int类型的,对。
07:00
对,这样子放的,那也就是说第一个地方,就是同学们看到的第一个地方,他放的就是我们所说的名字。明智的一个指针,好标到这里来。好,为了好看呢,我给大家来一个白色好。第一次我们稍微的慢一点,第二个呢,第二个空间放的就是我们的名字。啊年年龄年龄爱指。对不对。然后第三一个,第三一个空间呢,放的就是我们的什么呀,Color颜色。Co看这样子占空间,只是呢,我们这个呃,同学们看到的这个属性,它是呃这个成员它是一个指针,所以说他其实呢,这边他存的只只是一个指针而已。它会出现一个指针,指针呢,它会,嗯,把这个值具体的指向另外一个字符串常量,这样子去理解就可以了。如果说我们这是一个基本数据类型,那就简单直接放纸,打个比方啊,假如说假如说我们这边放的不是这样的一个值,而是一个什么呢?基本数据类型,比如说呃,Float啊,比如他一个薪水。
08:11
啊,如果是薪水的话呢,那这个地方就是同学们看到这个地方就在这个绿色框框里面,就可以直接放我们的薪水,明白这个意思了吧,好。好,这个呢,我就先撤回去,好各位同学根据这样一个这样一个理解呢,大家应该就很清晰的知道了,我们这一个CAT1在内存中的布局就这样子的,就是根据你的实际情况,放我自己的数据。这就是老师给大家讲的结构体变量在内存的布局,好,我们把前面的内容呢做一个简单梳理好,现在没有梳理,内容已经有点多了,梳理一下。来,往下看一看。看一看,那现在呢,我们我们这样子来梳理,刚才我们讲的内容有哪些。我们这块讲的是结构体,还有共用体的内容,画一个新的章节。
09:05
走起来。结构体和共用体呢,我们仍然是按照以前的方案,先给大家提出了结构体的呃需求。结结构体。他的一个需求就是一个养猫的问题。由这个养猫问题呢,我们首先想的是用传统的方案来解决。对吧,但是传统的方案解决呢,我们发现它是有一些问题的,如果我们用单独的变量来解决呢,发现管理不方便,数组呢,也同样存在这个问题,于是我们分析了传统解决方案的问题,就这样子的。传统解决方案的,它存在的问题呢,就是。不利于我们数据的管理,其实就这一句话,不利于我们数据的管理和维护,就这样子的。那这个传统解决方案呢,我也给大家拿过来吧。
10:01
放这哈,大家有个印象说,诶传统方案咱们是怎么解决的,为什么有这样的问题就比较形象了。当我们用传统方案解决,发现有问题的时候呢,我们就提出了一个新的解决方案,什么呀。结构体,那在讲结构体的时候呢,我们就把这个结构体做了一个快速入门案例,首先我们描述了一下结构体和变量的关系。好,这个图我们放到这来。这个图完了过后呢,是不是我们马上就来了一个快速入门案例,就怎么来解决呢?我们直接就上一段代码。是这样子吧,我们上了一段代码呢,来加强大家对结构体的一个认识,那具体案例在哪里,在这是不是这解决的,我把它复制到我们的笔记中。把这个快速入门讲完了以后呢,我们又做了什么工作,还记得吗?是不是我们就说了一下结构体和结构体变量的区别,还有它的联系。
11:01
对。区别和联系,就是说结构体和结构体变量到底怎么去理解,我做了这么一个几点的分析,好,我把这个拿过来。放到这里,好,郭同学,放到这里就可以了,很简单。当然,我们同样给它标一个号。那为了让大家理解结构体变量代表的是一个具体变量呢?我这里举了这么一个案例,就是以这个,以这个案例。来给大家讲的就是对照我们去创建一个int类型来理解创建结构体变量的啊,一个比一个一个比较,这样就很很容易理解了,把这个理解完了过后呢,我们是不是为了让大家从底层理解结构体变量它的一个布局呢,我们还还做了一个什么呀,内存布局的一个示意图。把这个呢给大家拿过来。那这个内存布局呢,我们实际上是针对了这段代码来画的,那具体来说就这样子。
12:00
看这里哈,也就是说如果我们在这里。如果我们在这里呢,要创建这个name。啊,给内复制,给age复制,给color复制,那么在它的这个结构体里面呢,其实第一个存的就是name的一个char,新一个指针。对,指针类型,那第二个呢,就是直接存值了,因为这是个基本数据类型,就直接把指放进去,第三一个呢,又是一个指针,这边存的就是个指针,当然这个指针呢,肯定还会去指向一个空间,这个空间才是具体放我们值的,明白这个意思吧,比如说你小白K,那么它就会在这边有个字符串,小白放这。OK,那么还有一个白色呢,它也会有个空间,实际上就是一个字符串常量,然后呢,把这个白色。诶,不好意思,这个怎么。放哪去了啊?我再重新画一下,刚才那个掉了。好,这边呢,我们指向一个呃,空间,空间呢里面有白色。
13:09
然后这边呢,各位同学这边呢,一一个指针,这个指向呢,又指向另外一个数据叫什么呢?呃,上面那个是小白。测一下。上面这个是小白。小白是他的名字。然后呢,这个color呢,指向另外一个空间,存的是白色这个字符串。也就是这样去理解呢,就更加的清晰了,对不对,那我再说一遍啊,如果咱们这个name呢,呃,这个地方存的不是一个指针,它不是一个圈新,而是一个基本数据类型,那就直接存在这里。同样这个假设一个color也是一个基本数据类型,那这个框框里面就直接存我们的指,就好像A一个道理,但是现在是指针,指针肯定是指向另外,呃,一一个地方的嘛,那前面都讲了很多遍了,我相信同学们应该能理解好,那这块内存的布局就聊到这里。
14:07
我把这个内存布局的示意图呢给大家放这。好,各位同学,那关于我们这一个结构体的内存布局,就给大家讲解到这里,大家好好的消化一下。
我来说两句