另一种定义方式如下:
struct 结构名
{
结构元素表
} 结构变量名 1,结构变量名 2……结构变量名 N;
例:struct FileInfo
{
unsigned char FileName[4]; unsigned long Date; unsigned int Size;
} NewFileInfo, OleFileInfo;
使用结构名能便于阅读程序和便于以后要在定义其它结构中使用。 枚举
在程序中经常要用到一些变量去做程序中的判断标志。如经常要用一个字符或整型变量
去储存 1 和 0 做判断条件真假的标志,但我们也许会疏忽这个变量只有当等于 0 或 1 才是有
效的,而将它赋上别的值,而使程序出错或变的混乱。这个时候能使用枚举数据类型去定义变 量,限制错误赋值。枚举数据类型就是把某些整型常量的集合用一个名字表示,其中的整型 常量就是这种枚举类型变量的可取的合法值。枚举类型的二种定义格式如下:
enum 枚举名 {枚举值列表} 变量列表;
例 enum TFFlag {False, True} TFF;
enum 枚举名 {枚举值列表};
emum 枚举名 变量列表;
例 enum Week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
enum Week OldWeek, NewWeek;
看了上面的例子,你也许有一个地方想不通,那就是为什么枚举值不用贬值就能使 用?那是因为在枚举列表中,每一项名称代表一个整数值,在默认的情况下,编译器会自动 为每一项赋值,第一项赋值为 0,第二项为 1…...如 Week 中的 Sun 为 0,Fri 为 5。C 语言也 允许对各项值做初始化赋值,要注意的是在对某项值初始化后,它的后续的各项值也随之递 增。如:
enum Week {Mon=1, Tue, Wed, Thu, Fri, Sat, Sun};
上例的枚举就使 Week 值从 1 到 7,这样会更符合我们的习惯。使用枚举就如变量一样, 但在程序中不能为其赋值。
联合
联合同样是 C 语言中的构造类型的数据结构。它和结构类型一样能包含不一样类型的 数据元素,所不一样的是联合的数据元素都是从同一个数据地址开始存放。结构变量占用的内 存大小是该结构中数据元素所占内存数的总和,而联合变量所占用内存大小只是该联合中最 长的元素所占用的内存大小。如在结构中定义了一个 int 和一个 char,那么结构变量就会占
用 3 个字节的内存,而在联合中同样定义一个 int 和一个 char,联合变量只会占用 2 个字节。 这种能充分利用内存空间的技术叫‘内存覆盖技术’,它能使不一样的变量分时的使用同一 个内存空间。使用联合变量时要注意它的数据元素只能是分时使用,而不能同时使用。举个 简单的例子,程序先为联合中的 int 赋值 1000,后来又为 char 赋值 10,那么这个时候就不能引用
int 了,不然程序会出错,起作用的是最后一次赋值的元素,而上一次赋值的元素就失效了。 使用中还要注意定义联合变量时不能对它的值初始化、能使用指向联合变量的指针对其操 作、联合变量不能作为函数的参数进行传递,数组和结构能出现在联合中。
联合类型变量的定义方法和结构的定义方法差不多,只要把关键字 struct 换用 union 就 能了。联合变量的引用方法除也是使用‘.’成员运算符。