00:02
看一下。创建结构体和结构体变量相关的内容,我们在定义这个结构体的时候呢,有这么几种方式,大家需要了解一下,大家先看第一种方式,第一种方式是先定义结构体。然后呢,在创建结构体变量。下面就这么一个案例,大家看这里我们是先把这个结构体。Student创建定义好,定义好过后呢,再去创建STUDENT1和student student2这两个结构体变量,看到没有?所以说这个属于是先定义结构体,再创建结构体变量的形式,但这里面有一点是需要同学们注意的,就是前面这个,呃,Ru。这个关键字是不能丢掉的,如果这个少了,那这这个就是错的,好,第一种方式我们就说完了啊。
01:00
这是创建,创建完了过后,你在初始化就可以使用了第一种,第二种方式呢,是在定义结构体的同时就定义结构体变量,这种方式怎么做呢?大家看这里,先前面也是一样的structure student,然后呢,这里面是我们的成员列表,成员列表完了过后,后面马上写上。它的变量的名称。这样子呢,就相当于说他在定义这一个结构体数据类型的时候,同时创建了两个结构体变量,一个是STUDENT1,一个是STUDENT2,这是两个结构体变量,然后呢,你就可以去初始化并使用,这是第二种方式,第三种方式呢,还有一种方式比较特别。它是什么呢?我们可以称之为叫匿名结构体,它怎么做呢?如果我们只需要STUDENT1和STUDENT2个变量,两个结构体变量后面不再需要使用结构体。
02:04
您定义其他的变量,也就是说后面我就不再需要这个结构体这个数据类型了,这样写。数据类型。也也就是说,嗯,这样我打个逗号啊,后面我就不再需要使用这个结构体数据类型了,不需要再使用谁了呢?就是我们定义的这个结构体。不需要再用了。那这个时候呢,咱们可以这样来写,就直接写一个structure。后面没有结构体的名称,我们称之为匿名结构体。没有名称,后面呢,直接写STUDENT1和STUDENT2,那我说一下,这时。说明第一点,该结构体。该结构。结构体数据类型。数据类型。类型没有名称没有名,你看这是不是没有名呢?
03:02
没有写,那么我们把它称之为匿名结构体。匿名结构体。第二点,那么这个匿名结构体呢,你可能你的意思就是说,我希望使用一次以后呢,我就不再使用了,所以说在后面呢,就赶紧定义你需要使用的结构体变量啊,这个STUDENT1和STUDENT2就是什么呢?就是该结构体的两个变量。那么你可以初始化并使用这个,相对说已经定义好了,定义好了过后你怎么用呢?非常简单,你初始化ST,比如说stu1.name,你可以给他一个名字,比如叫汤姆,对吧,然后呢,它的学号STUTU1.number等于100等等等等等,你可以使用了,但是呢,一定要说清楚,你也只能使用到该结构体的两个结构体变量,没有,没有机会再使用第三个了。
04:05
为什么呢?因为它是没有名字的,它是一个匿名结构体。明白这个意思,所以说我这写的很清楚,后面不再需要使用结构体数据类型了,在在不再不需要再使用结构体数据类型定义其他变量,这个时候可以这么去用,这是第三种使用方式,好吧,那紧接着我们来看一下成员的获取和赋值有几种形式。首先我们要阐明一点,结构体和数组其实从形式上,从这个内存的布局上很相似,它也是一组数据的集合,只是数组呢,它是同一种数据。的一种集合,而结构体呢?是不同数据类型的集合。那么对于一个结构体来说呢,整体使用其实是没有太大意义的,数组呢,它是使用这种中括号来获取单个的元素,比如说我有个数组RA,我要取取其中的第一个元素就是中括号零,对吧?我们是通过下标来获取它不同的元素的,那么结构体使用点号来获取单个的成员,其实前面大家已经用过了。
05:19
获取结构体成员的一般形式就是结构体变量名,点这个成员名,你比如说这个案例。这个案例你看我这里使用的是一个匿名结构体,我定义的16点的一,那么我在赋值的时候,其实就是这样赋值的,其实刚才已经写过了,我就举一个例子啊,比如说叫Jack。对吧,我在我我在使用的时候也是这样用的print f,比如说我输出。那么这个时候呢,我要输出他的名字student 1.name就可以了。也也就是说把这个缩小一点。也就也就是说,我们在去使用结构体的成员的时候,它的形式是结构体变量的名称,点成员名,这就这个点可以理解成什么呢?可以理解成我去访问该结构体变量的某一个成员。
06:15
就这样去理解。那紧接着我们再来看还有什么方式呢?还有一种方式比较有意思,它是这样子的。就是我们再去定义一个结构体,就是再把这个结构体呃定义,定义定义完的时候呢,就立即给它复制,你比如这种形式,我这里呃定义一个结构体过后,定义一个结构体过后,我这里有一个结构体变量叫STUDENT1,还有一个叫使STUDENT2,我这里可以直接复制。赋值的时候按顺序来就可以了,你看贾宝玉就付给这个name。11就付给这个number 18就付给这个age。B就付给这个group 90.50就付给这个SC。
07:00
也就是说,我们也可以通过这种方式,在定义的时候就直接按照这种方式给他复制也是OK的。也是OK的,那么我们来看把这个案例拿过来用一下哈,我们来给大家演示一下,因为这个案例呢,大家没有用过吗?我给大家演示一下,来走一个案例。我们这个叫结构体的又一个小案例啊,把这个。梳理一下。来吧。来,走一个想你。写一个文件,名叫结构体member。就是tru。Member。文本DEMO。零二。给他一个案例,那这时呢,我们仍然哈把这个后缀名给他做一个小修改。拿走一个。井号,Include std IO。Void。Me?主函数把代码往这一放。
08:02
那现在呢,我们把它还是格式化一下。同学们看,这个时候呢,我们定义的这些值就已经有了,我怎么输出呢?我就输出其中第一个人的名字,好吧,ST,我简单写一下STE,点它的name等于百分号,S怎么取呢?ST一看S1,第二,这下面就给你列出来了,有名字。好,我就取一个就行了,好吧,像这个number呀,名年龄啊,这个我就不去取了,大家知道怎么取的就行,走一个运行。运营起来我们可以看到能否输出贾宝玉,贾宝玉是给他附的一个名字嘛,对吧。跑起来。好运行起来功能,我们可以看到这个结果跟我们想的应该是一样的。家暴玉,那你如果要获取零黛玉,就应该是十六点二点零,那么这种方式前面能不能带一个名字呢?是可以的,比如说我们写一个STU。这也可以的哈,就说这个并不影响,就是你前面带不带名字,并并不影响这种复制方式的使用,这个也是一样的,我们再来运行一下。
09:08
前面带不带名字,带不带这一个结构体名称,这个是跟这个赋值的方式没有关系,可以带也可以不带,是不是还可以了,那有些同学说老师我能不能这样写呢?我们来看一下能不能这样写。比方说现在呢,我有我我去这样定义的一个,先定义一个,好,我们来看student a structure student sq3。等于中号。OK,我直接呢,把这样子在定义的时候直接给他复制,可不可以我们看一下。好,比如说这是林黛玉二。好吧,这是一张曲子,我们来输出一下。Print,呃,我我这样这样子就可以好吧,我这样就可以,比如说我们输出了10STUDENT3等STUDENT2,我就不输出了,我直接输出10STUDENT6.3,因为上面这个肯定是没问题的,十六三的名字,16.3这个如果不出什么问题的话呢,应该输出林黛玉二,那能不能输出呢,我们运行一下。
10:07
看看这种复制方式能否一步到位哈,能否一步到位。好,跑起来跑起来过呢,发现诶也是可以的,看到没有,也就是说你可以一个一个的复制,也可以整体复制,但是呢,这个对应关系要很明确,就是这个就代表给他的第一个元素,这是第二个元素,呃,第二个层面,第三个,第四个第五个。就这意思明白,那有可不可以这样呢?同学们可能说了,诶,老师,我能不能这样structure。Student使用的是。我先定义,定义完了过后呢,我在这个地方再一次性的复制,可不可以呢,我们来看一下。把这个粘贴复制过来,好,那现在我们把16的四呢改一个名字叫做史密斯。好,什么意思?好,同学们可以看到,此时此刻,这个就报错了。
11:02
大家看这里不允许的。你看s tu du4你这样复制是不允许的,因为为什么呢?因为这个是个整体啊,所以这样子呢,你看他直接给你报错。啊不是,如果你在定义的时候就直接这样整体给它赋值复出值,OK,但是你这样子不行。啊,你定义完了之后再向整体复制不允许,那你这个时候只能怎么办呢?他说老师我那我怎么办呢?好没问题,你可以这样写。十六四点。Name等于史密斯。只能这样子一步步的做了。明白这个意思了吧,就不能像刚才那样子哈,不能像这样子,这样子不允许了。对吧,这样子一写他就给你报错。好给你报错,比如说你把这个复制下来,他一样给你报错,说老师是不是写错了,没有问题啊,我拉过来这。改名是不是还是给你报错,说这样写不允许的。好,关于我们这一个第二种方式去获获取和赋值,我们就讲到这儿。
12:03
呃,那么嗯,那么这个呢,关于关于这一块内容就是我们定义结构体和结构体变量,以及跟结构体变量赋值和取值,我们就讲到这,把内容给它做一个梳理。刚才我们讲的内容呢,是这样一些内容梳理一下。这块的内容主要是讲的创建结构体。这种数据类型和结构体变量。他是怎么来操作的。走一个。首先我们首先我们说的是第一种方式,对不对,方式一。这些呢方式大家都要非常熟悉,因为你在做这个笔试或者面试的时候呢,你并不知道他用哪种方式,所以我们都要看,都要把它掌握了,第一种方式,第一种方式呢,是我们比较传统的方式,最先前老师在讲课的时候几乎都用的这种方式,先定义。是吧,先定义数据类型,再再去给它,再定义变量,再复制,这是第一种方式,第二种方式,第二种方式呢,就是在定义结构体时,同时咱们就定义结构体变量,没问题吧,同学们。
13:14
好,这是第二种方式,那第二种方式呢,我们仍然也给大家。拉过来。这是第二种方式诶。我这边挪一下。这是第二种方式,那我们再看第三种方式,第三种方式呢比较特别,它是以一种匿名结构体的方式来使用的,就是说我认为我这里面只需要用。有效,有有限的几个结构体变量,那我就不需要写名字也是可以的。也是可以的啊,就是你不要认为别人写错了就行啊,就是这么一种方式,把这个方式呢,也给大家拿过来。诶在哪里呢?在这对不对。放到这板书到我们的笔记中去。然后这个讲完了是不是,呃,我们就给各位同学讲了成员的获取和赋值的相应的这个案例,好第一种方式啊,我们来看一下。
14:08
这块我们讲的是成员。的获取和复制。这说明,那么第一个案例案例一,案例一呢,我们展现出的是哪种方式,就是传统的方式,这个前面我们一一直这样用的,就不再多说。第二种方式就比较特别一点,什么呢?就是我们在定义这个结构体变量时,整体给它复制也是OK的,这种方式也是OK的。叫案例二。把案例二呢给大家也拉过来好吧,那案例二呢,我们这边应该是用一个代码走了一圈的,所以说从这边拿。放到这里。给大家整理到笔记中去,没问题。好,那这里尤其要强调这种方式是不可以的,这种方式不行。这样这样复制不可以。
15:00
不可以,对不对,我们刚才也看了这样一写,马上就给你报错,那你如果是先已经把这个变量定义好了,然后再想复制,你只能是单个单个赋了,除非你是在定义时整体复制,这个是OK的,而且还有个对应关系,一定要有对应关系说一下。整体复制时再定义,再定义什么呀?再定义结构体变量时。变量是整体赋值,整体赋值需要对应,需要对应哈,就是你这第一个这个值呢,就对应的第一个成员,第二个呢,就对应的第二个,第三个对应第三个,这个关系不要搞错了。关系不要搞错,好各位同学,关于这一讲,我们就给大家讲解到这里主要是讲了什么呀,就是结构体。结构体本身这个数据类型的定义和它的变量定义以及成员的获取。
我来说两句