00:00
我们来看一下结构体是如何声明的,那前面呢,其实我们已经用过结构体的声明,你比如说在这块。这个就是生命的一个结构体,对不对,那么我们这呢,再给他系统的说一下,如何声明一个结构体,它的基本语法是这样子的,Type。标识符,这个标识符其实就是我们所说的结构体的变量啊,结构体名称。结构体。结构体名称啊名称OK,那结构体名称呢,其实就是一个标标识符,你可以根据自己的实际情况来写,注意这个type,就大家看到这个type,还有这个structure。这个呢是一个关键字,大家不能改结构体的名称,你可以随意,比如说前面我们写的student。那么里边呢,就会写上你的字段。你有,你有多少字段,你就写,第一个是字段的名称,第二个是字段的类型。这块前面是不是已经用过了,你比如说前面我们讲到这,这个就是字段的名称,这个就是字段的类型,能理解吧,OK,非常简单,你比如说我举了一个例子,Type student structure。
01:12
Name是最int score。Float,呃,FLOAT32,那么这个地方如果这块注意听啊,如果这个首字母为大写的,注意听S是大写的,那就意味着你定的这一个结构体类型可以在其他包被使用明白,如果你这个字段。的名字是大写的,那就意味着什么呢?你的这一个字段数据可以被其大包引用,能理解吗?如果你小写的话,那就成为私有的,只能在本包使用,这一点跟前面我们讲的就是。变量的作用域是一致的。OK,好,这个因为比较简单,老师呢就不再多说了,好吧,因为前面我们已经用过了,把它板书一下。
02:02
这块我们讲的是如何声明一个结构体。好,这里呢,有它的一个基本语法,我们把它罗列一下好吧。非常简单。放这。整理一下,这个是它的一个,呃一一个基本结构,呃,基本语法啊,我写到这里。基本语法。基本语法呢,给他板述一下好吧,这再说一下,这太。还有我们的structure,它是关键字,不能改,然后这呢是举例。举例,我们写到这对吧,这个名称就是我们结构体名称,能理解吧,这里面就是我们的字段。这个就是字段。啊字段。对不对,下面这个呢,当然也是字段。可以了啊,我就不多说,那如何生命结构体,我们介绍这过后呢,我们就来看一下结构体使用的时候,它的一一个概念就是字段,我们说一下字段呢,有些人也喜欢叫属性。
03:07
所以说我这做一个介绍,从概念上或叫法上看,结构体的字段和属性是一样的,有些呢,也喜欢叫field。就这段的意思,其实其实就是我这要专门把这个概念抛出来给大家讲一下,就是怕我们同学们在听课或者看书的时候,因为这个概念不一样,造成一种混淆的理解。我们都知道,因为我们学的这些构语言呢,其实是外国人,他是老外搞的,因此有些书它在翻译的时候呢,可能就不一样,有些书上它就叫字段,有些书上呢,它叫属性,有些就干脆叫field。所以说这三个概念呢,我们几乎可以认为它是说的同一个事情,明白吧,说的谁呀,就是说的这个东西能明白,有说有些叫字段,有些叫属性,有些直接直接叫field,比如说有些同学说,诶,你给我加一个字段进去。
04:01
有些程序员说你在这个结构体里面加个属性,甚至有些程序员说,那那个field是什么,那有些英文是吧,学的比较好的行者,那么我在授课过程中呢,干脆我们就统一叫字段了。如果不是特别说明,我就直接叫字段好吧,这样子呢,大家达成一个统一,听起来就比较轻松一点,好,这个我就不再举例了,好吗?第二点呢,我们说下字段是结构体的一个部分,组成部分,一般来讲,字段的数据类型可以是基本数据类型,也可以是数组,同时也可以是引用类型。就是咱们能用的,几乎他都可以使用。几乎都可以使用,比如前面我们写的这个猫结构体,Name是说你就是个属性,呃,也可以,它里面也可以是数组啊,就说你这边也可以写个数组,打个比方吧,同学们,我这写个数组精确。说猫呢,它有,呃它有很多成绩,比如说这个猫要考考考试,呃,它有数学成绩,有语文成绩,那我可以定个数组考试。
05:03
这也是可以的哟,比如说他有三门成绩写到这。你看这个地方呢,就是数组这个说明它的这个字段是什么类型呢?是数组这个类型可以的,没有任何问题,来我们执行跑一下,你们看一下它会怎么样呢。当你没有赋值的时候,大家应该猜的出来对不对。诶,这地方是你看这同学们看。是不是已然看到了?是吧?它的这个,呃,你因为你给它有一个字段是数组吗?数组是呃,有三个元素的一维数组,它就直接给你分配到这了,当然有些同学说老师如果是个二维数组可不可以,当然可以了,这个我就不再一个个举例了,好吗?好,这个大家注意一下,因为比较简单,所以说这块呢,我们就过了。我把它整理到这里去,好吧,跟上老师思路这块我们讲的是什么呀,我们讲的是字段的属性。好,把它整理一下。
06:01
那这呢,我们讲了一下基本介绍对不对,然后案例演示我就没写了,基本介绍里边呢,有两个概念,一个就是教法,我们统一了。第二个呢?第二个我们说了一下,字段是结构体的一个部分,它可以是基本数据类型没问题,也可以是数组,刚才举的例子,当然它也可以是引用类型,比如说待会我会举例,比如说是一个map。是一个指针或者是一个slash都可以,没有任何问题。好,这是字段的基本介绍,我们就说到这儿,下边呢,我们就来说一下字段的或者叫属性,它的注意事项和细节说明,我这里一共给大家整理了有四点,希望同学们认真听。好,我们先看第一点。啊,第一点。字段声明的语法和变量是一样的,先是字段的名,再是字段类型,这块是不是前面已经说过了?
07:01
是吧,字段的名字类型。其实他跟定声明一个基本变量是一样的,这块做过了啊,第二个字段的类型可以是基本类型数组或引用类型这块。我们刚才也说了,还有一点呢,就是在创建一个结构体变量后,如果没有给字段赋值,那么它都对应一个零值,也就是说是默认值,那这个零值分别是什么呢?规则和前面讲的是一样的,如果你这个字段是布尔类型,那么它默认就是false。如果是。数值,比如说是整形或者浮点型对吧,这应该叫竖直型就就行了,竖直。数值行,数字也行啊,数值也行,数值呢就是零,如果是字符串类型呢,就是空字符串。还有一点啊,数组类型的默认值跟元素类型一样,比如说刚才我们定定了一个score是int,那么它的默认值呢,就是000,但它也取决于你这个数组它是什么类型的,如果你这个数组是int,当然就三个零,如果你是string呢?那就是三个空字符串,能理解吧?
08:17
还有一点指针。如果你这个字段。是指针或者slash,或者是map。他们的名字都是ne。G还没分配空间,如果你的字段是指针slash或者麦,那么你要用的时候首先要make才能用,我这里给大家举个例子,我重点就是把这个案例给大家举一下,因为前面实际上我已已已经几乎都说过了,对吧?重点把这个说一下,就说如果我们这个结构体,它的字段的数据类型是指针。Slash或者map,那么我们在用的时候呢,首先要make才可以给它复制或者使用,来把这这个地方我给同学们整理一下。
09:05
好,同学们,我先把这三点拿过来啊,注意听。这块我们讲的是它的使用的注意事项,先整理一下笔记。哦,这是基本介绍。好,这块呢,我们。要撤回去了。好,还是用这个箭头对吧。嗯,刚才我们讲了有3.1个这块。是不是这是第一个细节,我不举例了,这是第二个细节,那第三个细节呢,我要举个例子看一下。好,一样。这块我张一往这边挪动,诶还不行啊,不能这样做啊,来走一个。做一个我重点呢,呃,给大家说一下这个问题什么呀,就是指针slash和麦。怎么去使用,因为前面的,呃,前面这些,我前面基本数据类型,像布尔啊,数值啊,字符串,我们比较简单嘛,对不对,我们来看看这个时候怎么用。
10:07
来举例说明。打开我们的Vs code,我们来说一下,就是字段使用的一个细节来新建一个文件夹。我们取个叫field,就是字段的意思吧,Field IE。I。IL。Details对不对?好,然后呢,我在这新建一个文件叫main.go我们专门讲它的细节。那为了省点事呢,我从全面占一个共用的部分。好,写个function may。跟上思路,我这里要重点讲的是这个类型啊,就是刚才我们说的第几点呢,就这一点。在这块。好,我们来看看这块儿怎么用。就是如果这样写啊。
11:01
如果。如果结构体的字段类型。是这些。对吧,那么零至16还没分配空间,如果要使用,先要make。如果需要使用这些字段。这样。这样啊。这样这样的字段。字段。需要先make才能使用,先make才能使用。好,那么我们来写一个案例吧,我们来写一个案例。比如说我现在呢,有一个type,我定义一个结构体。对吧,叫person。Person,没问题吧,Person。我定义这么几个信息,一个是name,是一个是age,是个int。好,这是两个基本数据类型,不说了,这个它还有考试成绩,Course。
12:01
Scores cos对吧,我认为他有考试成绩,FLOAT3264吧,有几个成绩呢?他考了有五门课,好,这个就写完了,我认为这里面它还有一个指针啊,它一个指针,那怎么定义一个指针呢?比方说PTR。Int。好,这个就是一个指针了。对不对,我们在认为它还有一个切片,它有一个切片好slice。好,切片呢,我们就这样写,没问题吧,是不是这就是个切片。是不是这是个切片?好,然后呢,我再定义一个map,比如说他还有一个map。对不对,Map呢?我们这样定义它叫map,什么呢?是准是准,STRG是准。好,这个是什么呢?是切片。好,现在呢,我想来使用这个东西,我们来看看怎么用啊,首先呢,我先。
13:02
定义,或者叫定义一个结构体变量。没问题吧,这个变量我就这样定义了,就P1。这个也很简单,对啊,这样写就VRP,然后呢,它是person。好,同学们,当我们这样做了过后,根据刚才老师画的这个图,你们可以想象到是一个什么情况。能画出这个图吗?是不是就意味着这前面三个会有了,但是因为这这几个它是什么呀,它是引用类型,它是指向别的一个地址的,那这个时候其实他们呢,默默认这个地方他们他们的空间还没有放地址。也就是说你可以这么理解,那现在呢,就是你可以延伸一下啊。把这个延伸一下。你就可以这么理解,就说明在这个基础上呢,诶他又。他有一。
14:00
它下面有新的。新的,诶,我就上去一下啊。有新的东西,那现在呢,比如说这里边你有了一个p tr SN map,其实他们现在呢,还没有指向任何一个。地址,也就是他目前这个值呢,其实是逆。你还不能用,那何以证明呢?来,我给大家打印出来看一下。我做一个PTR给人好P。我们先来看一下,这是。如果我输出,你们注意注意看这这三个变量。这三个啊,这三个字段它们是什么字,注意听啊,CD点点,那么CD到。我们的这个叫做什么呢?叫做呃字段的细节。Feel的细节,来,Go run。命点。跑起来,我们可以看到此时此刻,大家看老师没有说错吧?
15:02
前面是不是有个零,当然它的名字是空创,看不到啊,这个是他的成绩,这有个零。这个就是我们那个指针,你看这还有个。是不是现在也是空的,还有一个map也是空的,是不是跟以前讲的一样啊,因为他现在没有没有分配空间,所以说所以说实际上这三个都是都是那样。但是呢,它输出不一样而已,其实都是逆,明白这意思吧,如果你这样判断的话,也可以得到相同的,比如说我这样写if。p1.ptr。等不等于你。你可以这样去判断。你可以这样,你因为你这样不就取到这个PTR了吗?你可以输出来。注意听啊,这块还是蛮重要的,A1,好,我们来仔细一下,看看它进来了没有,我们一执行我们发现。进来了,那同样道理说老师,那你能不能把另外几个也比较一下呢?可以我把这个snes也给大家比较一下。
16:02
这是不是P指到它的代呀,那么我们把它输出PK2看一下跑一个运行。我们可以看到OK,二是不是也说出来了,那说明是不是你这个引用类型,呃,你没有给他分配空间,它也是那样,同样的道理,我再问大家第三个问题。如果我把这个也取出来了,叫做map,一、同学们思考一下这个OK,三会不会输出,也就是说这个map,这个map,因为你还没make,你们想想此时此刻map它对应的这个空间。这个值是不是也是那。是不是?是不是也是near,诶这个地方还不好,还不好弄哈,还不好弄,我得我得我得这样子啊ne也就说他的这个map其实也是一个ne,因为他还没有空间分配,他不知知道指向哪里吗?他不知道指向哪里,所以你这一执行,你会发现这个OK3怎么样,大家看一下,我们发现OK3是不是也输出了。
17:00
说明这三个都是你那问题来了,说老师那我现在就想用它,怎么用呢?你比如说我现在我我现在想在这个flash里面给他放一些数据进去,可不可以呢。那你这样做注意,比如说现在我要使用LA了。我能不能这样写p1.slice,注意听啊。第灵个。因为它是切片吗?它是什么类型的,它是一个int类型的,我就给他了100,请问这个地方会不会报错。会不会错?显然会报错,为什么会说显然会报错?因为你在现在还没有make,你就直接拿来用了。我们在前面讲切片的时候,是不是反复强调过一点,切片必须先make才能用,如果你这样直接使用,可以负责任的告诉大家,你一执行就会报一个错误。我们可以看到这报了一个panicle index out of range,哪里错了?第38行,第38行正是这一行。
18:03
那你就是要给他复制怎么办呢?那你就得按照以前我们规定的那样去做,首先要make。那你应该怎么做,你首先这样写啊,p1.slice。等于make make一个什么类型的,是不是你要make这么一个东西啊。对不对,你要给他make一个空间出来,否则的话人家是不会让你用的。是吧,那你那你的这个都没有,你怎么让别人用呢,对不对,所以说我们先来make一个这样。数据大小为十,假设来,我们再跑一下。再跑一下走。我们发现这个时候代码就没报错了,诶怎么还是OK3哦,我没有输出啊。我没输出,当这个当你这样做了过后,这个slash肯定就不等于空了,肯定就不等于空了,那么我们把这个输出来。看效果print LN,然后再输出P,我们看再次输出P的时候,这个时代是什么?
19:01
好,同学们看到这里,诶,有变化了。同学们看,原先原先就是你在没有给他分配make空间的时候,这个这个是不是就是我们的切片。它是不是一个空的呀,等到你make一个十的时候,是不是它变成这个了。因为你给他make了十个嘛,然后呢,第一个你是不是给他一个100就可以了,是吧,是这个意思吧,因为你你make了是十嘛。是不是就然后第一个切片的第一个元素,你给它复了100,这样就可以了,注意啊,使用切片时一定要先make,注意再次说明。再次说明,一定一定要make。对不对?那同样道理了,我问大家一个问题,麦是不是一样的?你卖如果说这样用它也会报错看啊来看案例。Can。同样。使用map。也需要,也一定一定要。
20:01
先make。啊,Make,你比如说有些同学他这个特别粗心,他这样写的哦,MAP1我给他存一个。K value,比如说K1给他一个什么信息呢。哎,你看你这个map是不是十寸十寸呢,说老师我给他一个K1,然后呢,再给他一个什么呀,比如说名字叫汤姆。这样能行吗?请问这样能行,其实这样也会报错,因为我们这个麦是不是也没有make,你就给他建字对了呀。也是不允许的,来执行一下,看效果,我们可以看到在这一行呢,仍然会报一个panic是哪里,他说。Assignment to就是这个就是赋值的意思,Assign就是赋值给一个entry in nearal map,这个这个map是个near,没有空间,你直接分配了第多少行,42行,找到第42行是不是这一行。那你一定要做用的话,你应该怎么操作,是不是跟上面一模一样,是不是也得这么去写呀,P一点MAP1等于make make什么。
21:08
是不是要make这种类型的map?对吧。可以了,注意这个大小你无所谓,只要给它分配一个空间,后面呢,它就会自动的增长,我们是不是学过这个东西啊,来走一个,此时此刻还会报错吗?就不会报错了,因为你是make过后再用的,大家看是不是这个时候又不一样了呀,你看。原先这个map是空的,等到你make完了过后,你给了一个K1COM就可以了,而且大家都知道map可以自动的增长。对不对,这块我就不再多说了,好同学们,我要强调的就是这一点,其实我讲了这么多,其实主要就是要强调这个使用,但是这个也是一样啊,这这个这个要空间是六,还记得吧,基本数据类型分配空间是六。基本数据的指针是六好,这个我不得多说了,这个要make,这个要make好吗?诶这个写成切片。
22:01
就是map。好,那这块是我们要重点强调的,就是这个位置,这两句话很重要啊,很重要,来把这块呢,给同学们放到这里来截取一个示意图。注意听讲啊,这块都很重要。如果没有把这个吃透,那我告诉大家,你们写项目的时候已然会蒙圈,依然会蒙圈。好,我把这个呢给大家整理排版一下。好,这是第一块。那紧接着我们再来看第27行下面的代码。27行代码代码。好,没问题,截取一下。没问题吧,但是我这里重点要强调的就是这。一定要重视,好吧,对方是一定要重视啊,重视OK。打一个叹号,另外一个呢,还是这儿也是一样,诶这个怎么变成这个德行了,再换一个啊,换一个东西。
23:02
框起来。也是一定要先make,再说一遍啊,一定要先make。在使用使用,在再次说明一定要make。不要上来给我,就像老师这样子啊,前面写的是直接拿来就给他复制,直接拉开就给他进字段都不行的。这个原理我在这个示意图里面其实已经说清楚了啊。对不对,因为你刚给他说,如果他是引用类型,其实他他都没有指向一个空间,等到他给了过后,给了给了过后呢,那大家想一想是不是这边。这边就会指向一个具体的位置。是吧,然后这里面就会引用到一个空间了,同样这个如果是引用类型,他也会从这个地方去引用另外一个空间,那这个空间是什么样子,就是根据呃,你这个map也好,还是数组也好,还是切片也好,自己来做啊呃,切片没有数组啊,就是切片。知道他这是也是一个地址,地址指向一个真实的空间,它不会直接不会直接在这放了,能理解吗。
24:02
好,这块老老师已经说过了啊,一定要注意,比如说吧,这是个切片。假设这这是个切片,切片完了过后呢,那你这块就会有个空间。对吧,然后这个地方是一个地址,比如说它会存一个地址叫0X1111,它会指向哪里呢?指向你这个切片,指向的一个一个空间,在切片里面有几个数据,那就是几个数据一样的,跟前面是一样的,明白了吧,它这只存一个地址。OK,那我就讲完了啊,老师就讲完,大家好好的领会啊领会一下。好,我把刚才这个图呢,还没有截过来,我把它整理诶。是吧,是这。好,第27行,好。站到这。好好领会一下啊,好好领会一下。好这一块呢,就是我们说的什么呀,我们说的这个结构体的第三一个细节也举例了,最后一个细节,注意听也很重要。
25:01
不同的结构体变量的字段是相互独立的,互不影响,一个结构体变量的字段更改不会影响到另外一个,这个呢,我也要严重的说明响。哎,我们来做一个说明。把它整理到笔记里边去。这个是第几点呢?这是我们说的第四点。没问题吧?第四点。耶,这个地方为什么没有?发生变化啊。第四点好,那就那就整理一下吧,第四点就就这样写吧,好吧。不同的结构体变量是独立的,互不影响啊,不会一个结构体变量更改不会影响另外一个,为什么呢?我们要强调一下结构体。结构体是什么呀?是直类型。这一点是特别特别重要的啊,不要把结构体搞成引用类型了。
26:01
不要把它搞成引用类型,我举个例子。案例说明。那么我们来看一个小小的案例,就以这个为例吧。写到这里来,把我们的第四点呢,把我们第四点也拿到这来。举个例子,大家体验一下。好体验一下,诶这一块我们放到这啊,同学们注意听,比如说注意听,我这里有一个结构体看到啊。我这里先定义一个person结构体,这不是已已经有person了吗?有person了啊,我们再定一个别的结构体。注意看。这个截流体呢,我们叫monster妖怪。妖怪好,妖怪有名字和年龄,我就留两个就行了,不要别的了,简单一点,这是个妖怪结构体,好,我们呢来。定义,我们来定义两个妖怪,MONSTER1。好,他的结构体是master,好monster呢,我给他赋值1.name,比如说这个人,这个monster名字叫做什么呢?叫做牛魔王,没问题吧,然后呢,MONSTER1他的年龄也给他一个,他是500岁。
27:12
整形的好,现在我做了这样一个动作,注意听讲注意听,现在呢,我有个MONSTER2。对,有个MONSTER2,我把MONSTER1付给了他。这个能理解吧,就是我把MONSTER1付给了MONSTER2。那我再问大家一个问题,我问大家一个问题,此时此刻注意听啊。PNPRPTL。如果我在这里输出MONSTER1。MONSTER1等于来MONSTER1,我再输出MONSTER2,我问大家一个问题,这个时候这两个这两个。结构体,它们输出的内容是不是相同的?我把这个MONSTER1付给了MONSTER2。
28:00
大家觉得?这两个变量,它这两个结构体,它们内容是不一样的,诶看这有什么问题。没有定义MON2啊,是不是写错了呀。那就是monster写错了啊,Monster写错了。好,这样子就可以了。来,大家觉得这两个输出内容相不相同,首先我可以告诉大家执行一下先,我们看到这个结果他们是相同的,都是牛魔王和500岁,但是我在这做一个动作,请注意观察。我写。monster2.name我改了,我把这个MONSTER2的名字改成狐狸精。或者叫做清油精。啊,叫做叫做这个这这个这个青牛精,好,我问大家一个问题。当我把MONSTER2的名字改完,改成亲友金过后,请问MONSTER1有没有影响?有没有印象?告诉大家,其实刚才我已经讲过了,因为他们是直类型,那就说这个MONSTER1付给MONSTER2的时候,其实它是一个直拷贝,对不对?既然它是一个直拷贝,我可以告诉大家,这个时候其实青牛精的改变并不会影响到牛魔王看效果。
29:13
走一个。我们可以看到,诶,上面这个还是牛魔王,下面是青酒精。对不对?那也就是说他们的的确确默认是自考费,当然有同学说了,说老师假设我就是想让MONSTER2改变,会影响到MONSTER1可不可以呢?当然也可以。当然也可以,但是这个时候咱们传的就是地址了。对不对,那你传的地址的话,那这个就变成什么了,这个就变成一个指针了。这个就变成一个指针,那你变成一个指针,你这样用,你看这个时候你去用它可能会报错。对吧。诶,这个时候他也没有报错,但是做了优化了,后面我们再说这个吧,先不把它搅在一起了好吗?先不把它搅在一起,如果我们后面想通过MONSTER2去修改MONSTER1,我们后面再说好吧,后面再说,至少现在呢,我们可以看出来这个默认结构体。
30:08
结构体啊,结构体是直拷贝是直类型。之类型。类型默认为只拷贝。只考呗。好,那么这样子的话呢,这个地方输出的信息是什么,把它整体拷贝过来。这个地方输出的信息是牛魔王。没问题吧?下面这个MONSTER2呢,它输出的信息是什么呀?是青牛精。这说明他们两个本质其实是独立的。对不对,好,我把这块呢,同学们啊,我把这一块给大家拷贝过来。领会一下它的使用。好,这是一段核心代码。把它放过来没问题吧?好,然后呢,我把这个monster的结构体的这个定义呢,也给大家拿到笔记里面去,这样大家呢,后边自己复习的时候也比较轻松。
31:07
对吧,没问题,好拷贝过来。Copy过来。那这样子啊,为了让大家彻底明白这个呢,我还想画一个示意图,就是到底这句话发生什么东西了,就MONSTER1付给MONSTER2,他在内存里面到底发生什么事情了呢?我给大家再画一个示意图。哦,不要嫌老师麻烦啰嗦啊,这个很重要的。那么我画出。画出。呃,画出上面代码的这个示意图,内存示意图。把这个示意图搞懂了,那彻底的就明白了,来画一个图,快速的给他走一个。它是这样子的啊,同学们注意听,我还是把这一段核心代码呢,也给大家拿到笔记里面来好吧。我重点就是分析一句话。我分析哪一句话呢?
32:00
重点就是分析这句话。到底在内存里面它是怎么走的?就这句话,我要给大家做一个分析,诶,这个地方怎么没有箭头啊。重新来画一个箭头过来,重点就是分析这句话。就是MONSTER1付给MONSTER2,在内存里面怎么走的?来画一个内存图。这是我们的内存。这是我们内存。没问题吧,那么当我们MONSTER1创建好了过后,根据我们前面画的示意图,它应该在内存里面出现这么一个东西,就MONSTER1。它会指向一个空间。这块啊,放在这,它会指向他自己的一个数据空间,这个没没问题,大家看这里。好,假设它对应的数据空间是这个。对吧,里面呢,会有会有两个字段,哪两个字段。
33:02
第一个字段就是他已经复职了,叫牛魔王。牛魔王。下面呢,还有一个字段是500岁。也就是说,此时此刻,MONSTER1注意听,MONSTER1呢,其实已经指向他了。对不对,诶这个这个图我画换成别的颜色啊,就是MONSTER1 monster1其实就指向这个牛魔王了,对吧,当我们我们执行这句话的时候,就是把MONSTER1付给MONSTER2的时候,他是怎么做的呢?告诉大家他是这么做的。他呢,这样做,注意听他是这样玩的。他把整个这个东西。复制了一份。完整的复制了一份。就一模一样的复制了一份,复制了一份呢,他又创建了一个变量叫MONSTER2。
34:00
好,MONSTER2。这个MONSTER2呢,跟MONSTER1是没有关系的,他又指向了他自己个的这个空间。所以这些颜色怎么又没有了啊,换一个别的颜色吧,它只行它了,那也就是说你们可以看到,当它复制完了过后,在内存里边MONSTER1和MONSTER2是完全独立的两个数据空间,因此我在后面。通过MONSTER2把这个牛魔王改成青牛精,过后是这样改的,改成青牛精了,青牛精。那你这的改变肯定不会影响到MONSTER1对吧,所以说它没有影响,当然了,有同学说老师我就想通过monster去改变他,那可以,你要想办法让monster指也指向这个空间就可以,后面我们再说好吧,就怎么样让一个结构铁负的是一个地址呢?也是可以做得到的,其实大家自己稍稍动动脑筋也可以做出来,其实说白了就是付一个地址给他吗?我把地址给一个变量,诶,那MONSTER2是不是就MONSTER2,他也就指向谁了。
35:03
如果你把地址给他,那monster就不会有个新的数据,它是直接也指向这个空间,那这个时候你通过monster去改变牛魔王。这个牛旺王改成牛青牛精的话,MONSTER1也就发生变化了,能理解吧,但是在默认情况下,它是什么呀?只拷贝。这个图大家一定要认真的理解好吗?好,我把这个示意图给大家拉过来。能理解啊,我这花了大功夫说的啊。大家一定要认真领会。这是默认情况下是只拷贝,大家理解一下好了,同学们,那关于我们说的结构体的细节啊,结构体的声明,还有它这里面字段属或者叫属性的细节呢,有四点我分别的给大家做了深入的探讨。我希望同学们把它好好的理解一下啊,尤其是。当我们属性呃,字段是引用类型的时候,首先要make,一定要有这个。
36:04
在脑海里面一定要深深的扎一个根进去,不然你写代码的时候一定会这个代码一定会崩溃,这第一点,第二点呢,一定要认识到我们这一个结构体,这种数据类型,它默认是只拷贝,也就是他是子类型,明白吧,如果你想让别的变量来修改它,那也可以,那后面呢,我们再讲,它也可以传一个地址过去。那这样也可以改变,但是那是后话,好吧,好,那关于这块内容,我们先给大家介绍到这些。
我来说两句