内容正文:
7.4 结构体数组和7.5共用体
一、教学目标
1.掌握利用结构体数组解决问题。
2.理解共用体定义格式。
3.了解共用体保存数据类型长度。
二、重点难点
1.重点:(1)掌握利用结构体数组解决问题 (2)理解共用体定义格式
2.难点:了解共用体保存数据类型长度。
三、教学时间
本任务教学,课内计划1课时。
4、
学科网(北京)股份有限公司精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
5、 教学过程
教学过程
教学环节
教师活动
学生活动
设计意图
导入新课
1.问题1:
在之前的学习中相信大家都了解到了结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员,有哪些呢?
例如: struct node{ datatype data[max]; struct node *next;
讨论、思考、观察
通过问题引入,激发学生的学习兴趣,思考上节课知识,教师引导,引出今天的学习主题
讲授新课
在实际应用中,可以把结构体定义为数组,数组的元素类型是结构体类型。结构体数组就是具有相同结构类型的变量集合。假如要定义一个班级50个同学的姓名、性别、年龄和住址, 可以定义成一个结构数组。
struct{
char name[8];
char sex[2];
int age;
char addr[40];
}STUD
STUD s[50]
这样结构体变量s可以存放50个学生的情况,即有50个STUD型元素s[0],s[1],... s[49]。
引用情况如:s[0],name 、s[0]sex、s[0]. age、s[0]. addr.yy
结构体数组的初始化方式与数组类似,都是通过为元素赋值的方式完成的。由于结构体数组中的每个元素都是一个结构体变量,因此,在为每个元素赋值的时候,需要将其成员的值依次放到一对大括号中。
例如,定义一个结构体数组Student,该数组有3个元素,并且每个元素有num、name、sex三个成员,可以采用下列两种方式对结构体数组student初始化。
具体示例如下:
struct Student
{
int num;
char name[10];
char sex;
};
struct Student students[3] = {
{20140101, "Zhang San", 'M'},
{20140102, "Li Si", 'W'},
{20140103, "Zhao Liu", 'M'}
};
也可以在程序运行时为结构数组的每个元素的各分量单独赋值,例如:
s[0].score=526;
sanf("%s", &s[0].name);
共用体
在C语言中,共用体类型同结构体类型一样,都属于构造类型,它在定义上与结构体类型十分相似,定义共用体类型的语法格式如下所示:
union 共用体类型名称
{
数据类型 成员名1;
数据类型 成员名2;
……
数据类型 成员名n;
};
在上述语法格式中,“union”是定义共用体类型的关键字,其后是所定义“共用体类型名称”,在“共用体类型名称”下的大括号中,定义了共用体类型的成员项,每个成员是由“数据类型”和“成员名”共同组成的。
说明:
1、共用体变量的定义与结构体类似,可以把类型说明和变量定义放在一起,也可以分开,还可以直接定义共用体变量而不要共用体名。
2、共用体的含义与结构体不同,共用体中的所有成员均放在以同一地址开始的存储空间中,使用覆盖方式共享存储单元。共用体所占存储空间的大小取决于占存储空间最大的那个成员。而结构体所占存储空间大小等于所有成员所占存储空间大小的总和。
3、共用体变量不能在定义时赋初值。
共用体类型数据的使用要注意以下几点:
不能对共用体变量进行整体赋值,只能单独引用其某个成员。
共用体的引用方式与结构体完全相同。
共用体变量不能作为函数的参数或函数值,但可以使用指向共用体的指针变量。
共用体可以作为结构体的成员,结构体也可作为共用体的成员。
共用体所占的内存长度等于最长成员的长度,因为共用体的成员共用同一个地址存放数据,也就是使用了覆盖技术,后一个数据覆盖前面的数据,使几个不同的变量共享同一段内存。例:
union B
{
int a;
char b;
short c;
double d;
};
学生思考、理解
如何定义结构数组
理解结构体变量s在结构数组中的作用
理解数组初始化过程
思考