第十章结构体与共用体
不能把共用体变量作为函数参数,也不能使函 数带回共用体变量,但可以使用指向共用体变 量的指针
共用体类型可以出现在结构体类型定义中,也 可以定义共用体数组。反之,结构体也可以出 现在共用体类型定义中,数组也可以作为共用 体的成员。
应用情况
设有若干个人员的数据,其中有学生和教师。 学生的数据中包括:姓名、号码、性别、职 业、班级。教师的数据包括:姓名、号码、 性别、职业、职务。可以看出,学生和教师 所包含的数据是不同的。现要求把它们放在 同一表格中。
enum weekday{ sun,mou,tue,wed,thu,fri,sat }; enum weekday a, b, c;
或者为:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a, b, c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a, b, c;
枚举类型中需要注意的地方
在“枚举”类型的定义中列举出所有可能的取 值,被说明为该“枚举”类型的变量取值不能 超过定义的范围。
应该说明的是,枚举类型是一种基本数据类型, 而不是一种构造类型,因为它不能再分解为任 何基本类型。
在枚举值表中应罗列出所有可用值。这些值也 称为枚举元素。
枚举类型中需要注意的地方
在C编译中,对枚举元素按常量处理,故称枚 举常量。它们不是变量,不能对它们赋值。
枚举元素作为常量,它们是有值的,C语言编 译按定义时的顺序使它们的值为0,1,2…
枚举值可以用来作判断比较。
一个整数不能直接赋给一个枚举变量。
体验
例子一:enum.c 例子二:enum2.c
同一个内存段可以用来存放几种不同类型的成 员,但在每一瞬时只能存放其中一种,而不是 同时存放几种。
共用体变量中起作用的成员是最后一次存放的 成员,在存入一个新的成员后原有的成员就失 去作用。
共用体变量的地址和它的各成员的地址都是同 一地址。
共用体类型数据的特点
不能对共用体变量名赋值,也不能企图引用变 量名来得到一个值,又不能在定义共用体变量 时对它初始化。
}a,b,c;
};
union data a,b,c;
共用体和结构体的比较:
结构体变量所占内存长度是各成员占的内存 长度之和。每个成员分别占有其自己的内存 单元。
共用体变量所占的内存长度等于最长的成员 的长度。
例如: 上面定义的“共用体”变量a、b、c各 占4个字节(因为一个实/整型变量占4个字 节),而不是各占4+1+4=7个字节。
处理算法
枚举类型
在实际问题中,有些变量的取值被限定在一个 有限的范围内。
例如,一个星期内只有七天,一年只有十二个 月,一个班每周有六门课程等等。
如果把这些量说明为整型,字符型或其它类型 显然是不妥当的。
为此,C语言提供了一种称为“枚举”的类型。
枚举变量的声明
设有变量a,b,c被说明为上述的weekday,可采 用下述任一种方式:
共用体变量的引用方式
只有先定义了共用体变量才能引用它,而且不 能引用共用体变量,而只能引用共用体变量中 的成员。
例如:前面定义了a、b、c为共用体变量
a.i (引用共用体变量中的整型变量i) a.ch(引用共用体变量中的字符变量ch) a.f (引用共用体变量中的实型变量f)
共用体类型数据的特点
共用体
共用体的概念 :
使几个不同的变量共占同一段内存的结构称 为 “共用体”类型的结构。
定义共用体类型变量的一般形式为:
union 共用体名 {
}变量表列;共用体Fra bibliotek例如:
union data
union data
{
{
int i;
int i;
char ch; 或
char ch;
float f;
float f;