资源描述:
《共用体和枚举类型》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、共用体的概念在C语言中,允许不同数据类型使用同一存储区域,共用体就是一种同一存储区域由不同类型变量共享的数据类型。例、把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中。共用体的定义形式:union共用体名{ 成员列表;}变量列表;6.4共用体uniondata{inti;charch;floatf;}x;共用体与结构体有何不一样?structdata{inti;charch;floatf;};注意区分:“共用体”:各成员占相同的起始地址,所占内存长度等于最长的成员所占内存。“结构体”:各成员占不同的地址,所占内存
2、长度等于全部成员所占内存之和。ichfxfxich二、共用体变量的引用只能引用共用体变量的成员,如:uniondataa;a.i;a.ch;a.f;注意:共用体中的多个成员在某一时刻只有一个成员起作用!!1三、共用体类型数据的特点1、共用体变量中的值是最后一次存放的成员的值,如:a.i=1;a.ch='a';a.f=1.5;完成以上三个赋值语句后,共用体变量的值是1.5,而a.i=1和a.ch=‘a’已无意义。2、共用体变量不能初始化,例:uniondata{inti;charch;floatf;}a={1,'a',1.5};[例]设有若干
3、个人员的数据,其中有学生和教师。学生数据包括:姓名、号码、性别、职业、班级。教师数据包括:姓名、号码、性别、职业、职务。如图:要求输入人员数据,然后输出。分析:学生数据的class(班级)和教师数据的position(职务)类型不同,但在同一表格中,使用“共用体”数据结构。struct{intnum; charname[10]; charsex; charjob;union {intclass;/*班级*/charposition[10];/*职务*/ }category;};例6.6:定义存储某单位职工信息所需数据类型,每名职工信息包
4、括职工号、姓名、性别、年龄、车间号(工人)/职务(干部)。structemployee{longnum;charname[20];charsex;intage;???category;};structemployee{longnum;charname[20];charsex;intage;union{intworkshop;charposition[10];}category;};例6.5将一个整数按字节输出voidmain(){unionint_char{inti;charch[2];}x;x.i=24897;printf("i=%di=%
5、o",x.i,x.i);printf("ch0=%o,ch1=%och0=%c,ch1=%c",x.ch[0],x.ch[1],x.ch[0],x.ch[1]);}6.5枚举类型如果一个变量只有几种可能的值,可以定义为枚举类型。“枚举”:将变量可能的值一一列举出来。变量的值只能取列举出来的值之一。枚举类型定义格式:enum类型名{枚举元素1,枚举元素2,……}例:enumweekday{sun,mon,tue,wed,thu,fri,sat};枚举类型变量的说明:enum枚举类型名变量列表;如:enumweekdayworkday,w
6、eek_end;定义了两个枚举变量:workday,week_end,它们只能取sun到sat之一,如、workday=mon;week_end=sun;sun、mon、....、sat称为“枚举元素”或“枚举常量”。说明:1、枚举元素是常量。在C编译器中,按定义的顺序取值0、1、2、...。例:workday=mon;printf("%d",weekday);输出整数1。2、枚举元素是常量,不是变量,因此不能赋值。sun=0;mon=1;但在定义枚举类型时,可以指定枚举常量的值,如:enumweekday{sun=7,mon=1,tue,wed
7、,thu,fri,sat};此时,tue、wed、...的值从mon的值顺序加1。如,tue=2。3、枚举值可以作判断,例、if(workday==mon)....if(workday>sun)....4、整型与枚举类型是不同的数据类型,不能直接赋值,如:workday=2;但可以通过强制类型转换赋值,如:workday=(enumweekday)2;6.6用typedef定义类型一、概念关键字typedef用于定义一种新的数据类型,它代表已有数据类型,是已有数据类型的别名。例、typedefintINTEGER;typedeffloatREAL
8、;定义新数据类型INTEGER,它代表已有数据类型int。定义新数据类型REAL,它代表已有数据类型float。通过上述定义后,以下两行