内容正文:
计算机网络基础
7.4 结构体数组和7.5共用体
第7章 结构体和共同体
高等教育出版社
教学目标
一
掌握利用结构体数组解决问题。
1
2
理解共用体定义格式。
3
了解共用体保存数据类型长度。
教学重难点
二
掌握利用结构体数组解决问题。
1
2
3
理解共用体定义格式。
了解共用体保存数据类型长度。
导入新课
三
在之前的学习中相信大家都了解到了结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员,有哪些呢?
例如: struct node{ datatype data[max]; struct node *next;
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
新知讲授
四
在实际应用中,可以把结构体定义为数组,数组的元素类型是结构体类型。结构体数组就是具有相同结构类型的变量集合。假如要定义一个班级50个同学的姓名、性别、年龄和住址, 可以定义成一个结构数组。
结构体数组
7.4.1
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
结构体数组
7.4.1
结构体数组的初始化方式与数组类似,都是通过为元素赋值的方式完成的。由于结构体数组中的每个元素都是一个结构体变量,因此,在为每个元素赋值的时候,需要将其成员的值依次放到一对大括号中。
例如,定义一个结构体数组Student,该数组有3个元素,并且每个元素有num、name、sex三个成员,可以采用下列两种方式对结构体数组student初始化。
结构体数组
7.4.1
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'}
};
具体示例如下:
结构体数组
7.4.1
也可以在程序运行时为结构数组的每个元素的各分量单独赋值,例如:
s[0].score=526;
sanf("%s", &s[0].name);
共用体
7.5.1
在C语言中,共用体类型同结构体类型一样,都属于构造类型,它在定义上与结构体类型十分相似,定义共用体类型的语法格式如下所示:
union 共用体类型名称
{
数据类型 成员名1;
数据类型 成员名2;
……
数据类型 成员名n;
};
共用体
7.5.1
在上述语法格式中,“union”是定义共用体类型的关键字,其后是所定义“共用体类型名称”,在“共用体类型名称”下的大括号中,定义了共用体类型的成员项,每个成员是由“数据类型”和“成员名”共同组成的。
共用体
7.5.1
说明:
1、共用体变量的定义与结构体类似,可以把类型说明和变量定义放在一起,也可以分开,还可以直接定义共用体变量而不要共用体名。
2、共用体的含义与结构体不同,共用体中的所有成员均放在以同一地址开始的存储空间中,使用覆盖方式共享存储单元。共用体所占存储空间的大小取决于占存储空间最大的那个成员。而结构体所占存储空间大小等于所有成员所占存储空间大小的总和。
3、共用体变量不能在定义时赋初值。
共用体
7.5.1
共用体类型数据的使用要注意以下几点:
不能对共用体变量进行整体赋值,只能单独引用其某个成员。
共用体的引用方式与结构体完全相同。
共用体变量不能作为函数的参数或函数值,但可以使用指向共用体的指针变量。
共用体可以作为结构体的成员,结构体也可作为共用体的成员。
共用体
7.5.1
共用体所占的内存长度等于最长成员的长度,因为共用体的成员共用同一个地址存放数据,也就是使用了覆盖技术,后一个数据覆盖前面的数据,使几个不同的变量共享同一段内存。例:
union B
{
int a;
char b;
short c;
double d;
};
在这个共用体中最大的成员长度为8,