下面就用一个综合的例子说明三种类型的简单使用。
#include
#include
void main(void)
{
enum TF {
False, True} State; //定义一个枚举,使程序更易读
union File { //联合中包含一数组和结构,
unsigned char Str[11]; //整个联合共用 11 个字节内存
struct FN {
unsigned char Name[6],EName[5];} FileName;
} MyFile;
unsigned char Temp;
SCON = 0x50; //串行口方式 1,允许接收
TMOD = 0x20; //定时器 1 定时方式 2
TCON = 0x40; //设定时器 1 开始计数
TH1 = 0xE8; //11.0592MHz 1200 波特率
TL1 = 0xE8; TI = 1;
TR1 = 1; //启动定时器
State = True; //这里演示 State 只能赋为 False,True 两个值,其它无效
//State = 3;这样是错误的
printf ("Input File Name 5Byte: \n");
scanf("%s", MyFile.FileName.Name); //保存 5 字节字符串要 6 个字节
printf ("Input File ExtendName 4Byte: \n");
scanf("%s", MyFile.FileName.EName);
if (State == True)
{
printf ("File Name : ");
for (Temp=0; Temp<12; Temp++)
printf ("%c", MyFile.Str[Temp]); //这里列出所有的字节
printf ("\n Name :");
printf ("%s", MyFile.FileName.Name);
printf ("\n ExtendName :");
printf ("%s", MyFile.FileName.EName);
}
while(1);
}
图 17-1 所示是运行的结果,A 中所示是说明例程中联合中的数组和结构占用的是同一段地址的内存空间,而结构中的两数组是各占两段不一样内存空间。