00:01
同学们,我们来看一下结构体的声明。前面呢,我们对结构体有有了一个基本的认识。现在呢,我们来看一下结构体它一些系统的介绍,首先我们看一个完整的结构体声明,它的一个格式是什么样的,比如说大家看这里,前面呢,有一个关键字叫structure,这个呢是固定的。刷这个关键字呢,大家不要去改它,固定后面写上你的结构体的名称,注意结构体名称呢,一般首字母大写。就是结构体名。首字母。首字母大写。你比如说比如前面我们讲的cat。前面讲的cat的这个C,我们就是用大写的C,对不对,那后面如果说呃,再比如说同学们要见这个person,那你可写p person,类似于这样的一些东西,下面呢,我们称之为成员列表。成员列表里面呢,这边可以是基本数据类型,也可以是其他的,像这像我们的指针数组都可以,那我举个例子大家看一下,下面呢,就是我们的一个结构体的举例,其实前面我们已经用过了。
01:15
你比如说我定义一个结构体叫student student里面呢,我有一个name,是个指针,它会指向一个字符串,Name有他的学号,有他的年龄,这两个呢是基本数据类型,还有一个char group,它所在的学习小组,对吧?那这里呢,我们也是用的一个基本数据类型char float乘积也是基本数据类型。这个就是我们自定义的一个学生。这样一个结构体,这里面是他的成员。那接着我们继续来看关于成员使用的时候需要注意哪些。首先我们来明确一个叫法,成员这个叫法。有些书上呢成为成员,有些书上说是结构体包含的变量,也就是这块。
02:03
就是同学们。看到的这五个变量,有些地方直接叫结构体的成员,有些地方呢,说是这样说的,说是这一个结构体包含的变量都可以都可以,那么。成员呢,是结构体的一个组成部分,一般来讲是基本数据类型,就基本数据类型会多一点。也可以是数组指针结构体,也就是说它的结构体的成员呢里面可以是在一个结构体。就下面呢,注意听哈,也就是这里面呢,还可以是它的成员,也可以是另外一个结构体。还可以是结构体,就结构体里面呢,又有一个结构体,这是允许的,各位同学注意一下,你比如前面我们讲的CA in the age就是个成员,接着继续往下面来看,那对于这个结构成员呢,我们有四个注意事项需要同学们把控一下,第一个呢?
03:04
成员声明的语法和变量一样,你变量是怎么声明的?我们的成员也就是怎么生明的,因为每一个成员的本质其实就是一个变量。他的声明的方式是数据类型、成员名。第二个呢,字段的类型可以是基本数据类型,数组、指针或结构体,这个在前面我们已经说过了,第三点是需要同学们注意的。在创建一个结构体变量过后,需要给程序员赋值,如果没有赋值就去使用,可能导致程序的异常终止。我给大家举个例子,案例呢非常简单,我跑一下就可以了,好吧,我跑一下就可以了,没什么难度。那各位同学来,我给各位朋友运行一下,一目了然。下面呢,我们这块讲的是成员的一个细节,对不对,或者成员的使用member吧,成员呢,我们取个名字叫member。Member,然后使用的注意事项的notice。
04:03
我们创建好这一个文件过后呢,将它的后缀进行一个简单的修改。各位,我们include std。Void。把我们刚才这段代码呢拿过来用一下。这多了。多了过后呢,我们把前面写的去掉一下,进行一个格式化。各位同学看一下这段代码吧,这段代码大家看一下,这里面是一个结构体,看到没有,Cat里面呢,有name,有是一个指针,对不对,有一个。年龄有一个color,就是前面我们用过的,然后这里面我这里定义了。定义。定义了一个结构体变量,这个结构体变量看一,但是同学们发现没有,我并没有初始化,就直接去使用了。那如果说我们在定义一个结构体变量过后,没有初始化就直接使用,会有什么后果呢?
05:06
程序就会异常的终止。运行一下。看效果。我们会看到呢,程序运行的过程中会出现一个大红叉,会异常终止看一下。各位看到没有?看到没有出现这么一个错误,大家看这里,它这个提示信息呢,多少能够体现出一点,他说the variable cat,他说这个变量啊,开的is used with without being。就是他没有怎么样,没有初始化。Initialized就是没有初始化,Initialized就是这个意思,因为你没有初始化会出现个什么情况呢?就是你没有初始化的话,这些值它成员的是有可能是指向一个垃圾拉内存的一个垃圾值,所以说会导致我们程序的异常终止,明白这个意思吧。
06:02
这是老师给大家讲的。成员的注意事项,那各位同学,我们把前面讲的内容呢,做一个简单的小结来看一下。这块呢,我们讲的是结构体声明,还有他成员的一些注意事项梳理。走起来这块我们讲的是如何生命结构体,生命结构体它基本的一个语法结构,大家必须记清楚。这是它的一个基本基本的语法结构,下面是个案例。呃,有一点我需要给同学们说清楚哈,就是如果我们直接定义一个结构体的话呢,这个后面是有一个分号的,大家看我是不是带了一个分号啊。这个分号不要丢了,你如果丢了的话呢,会出问题,看到没有。所以说这一门我要再强调一下。在这里。这边有个分号要带上。OK,分号也带上,那这边呢,我们笔记里面也把它带上啊,因为如果你不带上的话,这个语法它是错的。
07:00
OK,接着继续往下看,下边呢,我们是不是说了一下成员的基本介绍和他使用的注意事项,梳理了一下。看这里第一个。嗯,这块是成员,成员里面我们先做了基本介绍。说了一下我们成员需要注意的事项。这个说完以后呢,又给各位同学,又位同学,各位同学说了一下他的注意事项。这这里面还有一个注意事项,我忘了说了,我直接说一下就行了,就是不同的结构体变量的成员是独立的,互相不受影响,什么意思呢?就是一个结构体变量的一个结构体变量。一个结构体成员这样写,一个结构体成员。一个结构体变量的成员这样写一个结,一个结构体变量成员更改不会影响到另外一个,这个什么意思?我简单说一下,就是这样一个含义,大家看。
08:03
我们前面不是写了一个例子吗?是不是这里我有两个结构体的变量,一个是一,一个是cat,二是这意思吧。如果一个是CAT1,一个是CAT2,我问大家,如果我这个CAT1的名字修改了,会影响到CAT2吗?显然不会。为为什么不会呢?因为在内存里边,它会两个独立的,也就是说你第一个你你创建一个KD1,它会有这么一个空间。在内存里面,那如果你再创建一个呢,各位朋友OK,如果你再创建一个。好,如果你再创建一个的话呢,它会再次生成这么一个空间,这里这是独立的。我把这个复制一份好吧。也就是说,如果你再有一个的话呢,它会它会有一个全新的。先来一个。也也就是说这是全新的,比如说你这个这里面那个年龄是100岁。对吧,当然这两个指针我就不画了,这两个指针名字是指向哪里就指向哪里,肯定是独立的嘛,比如说你这边,你这边有个空间。
09:08
指向这里,你这有个空间指向这个字符串常量,那我这边名字呢,显然指向的是另外一个名字了,比如小花对吧,你这边指向的是花色。那你这边修改了,你这个char型指向修改了,或者你的int修改了,显然大家是不互相影响的,它是相互独立的,比如你这边还有一个开二啊CAT2。这个CAT2呢,指向的是这个结构体的首地址,所以这个结构体呢,它也会有地址的,这个我就不讲了,以前讲过所有的变量呢,都会有自己的地址,对不对,那他的地址肯定跟他地址不一样。他的地址会指向他的第一个,他的这一个第一个成员的地址啊,这个肯定大家是知道的。好,这是这么一个图,我把它拿下来吧。复制到这里。待会儿再用一下好吧。
10:02
好,我复制到这儿,待会儿呢我再用。完成。各位,我们接着往下面梳理。刚才我们已经讲到了,就是它的注意事项有这么几点,把这个图先放过来。在这里呢,我们梳理到这块了,拿过来。注意事项和使用细节。有四点。有四点。放这好。那么这四点呢,第一第一点,第二点这个不说了,就是它的生命的语法跟变量一样,字段可以是基本数据类型,指针或者是呃,数组或者结构体等等,也就是说,也就是说我们整个这里,整个在学数据类型的时候,所有的数据类型都可以放,但是用的最多的应该还是基本数据类型。那这边有个题,第三个题,第三个细节呢,有一道题,有一个案例,我给大家拿过来。放这儿。
11:01
就说下面这种用法呢,会导致程序的异常终止。上面上面代码运行。代码运行会干什么呢?会导致导致程序异常终止。原因是什么呢?原因就是因为我们这个K1,你的成员没有初始化,你就去使用了,那这样的话呢,它的变量就有可能指向内存的垃圾值,从而导致程序的终止,原因说一下。对,原因是。是没有。没有初始化,没有初始化什么呢?没有初始化我们的结构体变量的成员。对吧。就去用了第五一个就是我们这画的这个细节啊,比如说我们这取的这个,呃,几个点catch。就是什么意思呢?就说我们每一个结构体变量,它的空间是相互独立的,你有你的空间,我有我的空间,我修改了不会影响到你。
12:04
除非你是按照地址的方式来引用的,那是那是另外一回事,如果你在你在没有处理的时候,那么每个结构体呢,其实他们空间是独立的。就好像我们前面讲的这个题一样,CAT1和CAT2完全是独立的啊,K1和K2是有独立空间的。各位同学,那关于成员的使用注意事项跟细节,就给同学们介绍到这里。
我来说两句