资源描述:
《C_C++程序设计教程 教学课件 作者 王连相 等 第12讲 复合数据类型4.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、枚举类型Madebylut共用体类型位域类型别名第12讲第6章复合数据类型共用体(联合)类型什么是共用体结构型数据类型;存储形态:共用体类型变量的若干分量分时共占同一存储空间。例如:uniondata{inti;charc;longl;}com;com.i=10;com.c=‘A’;com.l=65535;:cil0000000000000000000000000000000000000000000010100000000000000000111111111111111101000001共用体类型共用体类型及其变量的定义和引用共用体的应用共用体类
2、型及其变量的定义和引用与结构体类似,本质的不同在于使用内存的方式。类型定义:union类型名{数据类型变量名;数据类型变量名;……}联合变量名表;(或;结束)变量的定义:三种方式(同结构提变量的定义方式)共用体变量的引用方式:(.或->)如前所示:com.I、com.c、com.l[例1]main(){union{unsignedcharc;unsignedintI[4];}z;z.I[0]=65;z.I[1]=66;printf(“%c”,z.c);}结果:A[例2]main(){union{intI[2];longk;charc[4];}
3、r,*s=&r;s->I[0]=0x39;s->[1]=0x38;printf(“%c”,s->c[0]);}结果:9570560012398S->I[0]S->I[1]S->c[0]枚举类型什么是枚举类型枚举是一组命名的整数常量,用以说明可能类型变量的所有合法值。定义类型形式:enum名字{枚举列表}变量表;定义变量形式(三种方式)枚举类型的变量仅有几个确定的值。例如:enumweekday{sun,mon,tue,wed,thu,fri,sat}workday;枚举元素是常量,具有数值。按顺序默认为0,1,2,….;也可以在定义时按需求指
4、定。如:enumcolor{red,green,blue=8,blank,white};应用举例[例1]main(){enumlanguage{basic=3,assembly,ada=100,cobel,fortran97};enumlanguagespeak;speak=fortran97;printf(“%d”,speak);}结果:102[例2]main(){enumteam{my,your=4,his,her=his+10};printf(“%d%d%d%d”,my,your,his,her);}结果:04515类型别名为提高程
5、序的可读性,我们可用保留字typedef为类型起一个新名字,这个新名字应该用一个有意义的标识符来命名。typedef不建立新的类型,它只是为原有类型起一个新的名字而已。如:typedefchar*STRING;就可以用STRING代替char*,即STRINGP;定义了一个指向字符的指针变量p。[例1:]typedefunion{longI;intk[5];charc;}DATE;//10structdate//2+10+8=20{intcat;DATEcow;doubledog;}too;main(){DATEmax;printf(%d”,
6、sizeof(structdate)+sizeof(max));}结果:30[例2]typedefunion{longx[2];inty[4];charz[8];}MYTYPE;MYTYPEthem;main(){printf(%d”,sizeof(them));}结果:8位域所谓的位域是以位为单位定义长度的结构体类型中的成员。位域类型及变量的定义形式:struct位域类型名{类型位域名1:长(二进制位数);类型位域名2:长(二进制位数);……}变量表;注:一个位域可以定义成int,unsigned或signed。长度为1的位域必须定义为un
7、signed,因为单个位不可能有符号。位域的引用:structpacked_data{unsigneda:2;unsignedb:6;unsignedc:4;unsignedd:4;inti;}data;abcdi264416例1:下列定义中的错误。Structtwobyte{unsignedI:3;unsignedj:4;unsigned:0;floatk:4;unsigned:2unsignedm:18;}bit;位域应用举例例2:main(){structpp{unsignedi:3;unsignedj:4;unsignedk:4;unsi
8、gned:0;//下面将从下一字节开始分配unsigned:3;unsignedm:6;};unionuu//长度为4个字节{struc