《C语言程序设计》课件4第10章.ppt
第10章结构体与共用体
10.1结构体类型
10.2共用体
10.3用typedef定义已有类型的别名
10.4案例学习
10.1结 构 体 类 型
10.1.1结构体类型的定义
结构体类型定义的一般形式是:
例如学生类型的定义:
这样就定义了一种结构体数据类型structstudent。采用
同样的方法可以定义日期结构体类型:
10.1.2结构体变量
1.定义结构体类型的变量
定义结构体变量有三种方法:
(1)利用已定义的结构体类型名定义变量。
struct结构体名变量名表;
例如:structstudentstu1,stu2,stu3;
(2)在定义结构体类型的同时定义结构体变量。
struct结构体名
{成员定义表;
}变量名表;
例如:
(3)直接定义结构体类型变量。
struct
{成员定义表;
}变量名表;
例如:
2.结构体变量的初始化
结构体变量的初始化与一维数组类似,一般形式为:
结构体变量名={初值表};
例如:
structstudentstu1={1002021,“Liming”,‘M’,19,95.5};
如果初值个数少于结构体成员个数,则将无初值对应的
成员赋以0值;如果初值个数多于结构体成员个数,则编译
出错。
3.结构体变量成员的引用
结构体变量成员引用的一般形式如下:
结构体变量名.成员名
其中的“.”是成员运算符,运算优先级别最高。
例如:stu1.num=1002032将把1002032赋值给结构体变量
stu1的num成员。
另外,也可以用指针来引用结构体变量的成员。例如:
4.结构体变量的运算
(1)同类型结构体变量之间可以相互赋值。
(2)用sizeof运算符计算结构体变量所占的内存空间。
(3)可以用取地址运算符对结构体变量进行取址运算。
【例10-1】结构体变量的运算。
图10.1例10-1运行结果
10.1.3特殊的结构体成员——位段
1.位段的定义
在结构体中可以以位为单位来指定其成员所占的内存长
度,这种以位为单位的成员称为位段。一个位段由一位或若
干位组成。在定义位段的时候,位段名后面加冒号,冒号后
指出位段的位数。
例如:
图10.2位段的图示
2.位段的使用
【例10-2】输入一个学生信息再将其输出。学生信息
包括学号(num)、姓名(name)、性别(sex)、出生日期(birthday)、
成绩(score),要求性别和出生日期用位段表示。
图10.3例10-2运行结果
10.1.4结构体数组
1.结构体数组的定义
定义结构体数组和定义普通数组方法相同,只要用一个
方括号指明是数组,并且给出数组的大小即可。和定义结构
体变量一样,定义结构体数组也有三种方法:
(1)利用已定义的结构体类型名定义结构体数组。
(2)在定义结构体类型的同时定义结构体数组。
(3)直接定义结构体类型变量。
例如:
2.结构体数组的初始化
【例10-3】结构体数组。
图10.4例10-3运行结果
10.1.5结构体与函数
【例10-4】编制一个复数加法函数,采用值传递的方
法传送数据。
图10.5例10-4运行结果
10.2共用体
10.2.1共用体类型的定义
共用体类型定义的一般形式如下:
下面是对共用体类型定义的一些说明:
(1)union是定义共用体类型的关键字,共用体名是用户
定义的类型标识。
(2)共用体名和成员名的命名规则和变量名的命名规则
相同。
(3)成员的数据类型可以是C语言所允许的任何数据类型。
例如:
10.2.2共用体变量
1.定义共用体类型的变量
共用体变量的定义与结构体变量的定义相似,也有三种
方法:利用已定义的共用体类型名定义变量、在定义共用体
类型的同时定义变量、直接定义共用体类型变量。定义共用
体变量之后,系统按照共用体类型的组成,为定义的共用体
变量分配内存单元。共用体变量所占内存大小等于共用体中
占用内存的长度最长的成员的内存大小。
例如:
2.共用体变量成员的引用
例如:
3.共用体变量的运算
(1)同类型共用体变量之间可以相互赋值。
(2)用sizeof运算符计算共用体变量所占内存空间。
(3)可以用取地址运算符对共用体变量进行取址运算。
【例10-5】共用体变量的