




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章结构体与共用体,结构和联合的概念,在数据中,经常有一些既有联系,类型又不同的数据,并且它们之间又有一定的相关性,需要一起处理。,如:学生基本档案的数据,字段:学号姓名性别地址分数类型:longcharcharcharfloat,C语言允许用户按自己的需要将不同的基本类型构造成一种特殊类型,即结构和联合。,结构和联合的操作分为三个步骤:,根据需要定义结构或联合类型;通过定义的类型说明变量、数组、指针;引用变量、数组元素和指针指向的对象。,7.1结构体,结构类型的定义,格式:,struct结构名type成员项1;type成员项2;type成员项n;;,结构标志。,用标识符命名的结构类型名。,结构类型中所含的成员项及其类型。,structstudentlongnum;charname20;intage;charadd30;floatscore;,结构的定义确定了如下两点:,定义结构类型,确定结构中的成员项的名称及类型。,指明该结构类型的变量在内存中的组织形式。,结构变量的说明,定义结构只是确定该结构类型的名称及其成员项的组成及成员项的类型。必须由定义的结构类型说明结构变量,才开辟相应的内存空间以供使用。,结构变量的说明方式:,定义后说明,structstudentlongnum;charname20;intage;charadd30;floatscore;,structstudentwang,zhang,liu;,用structstudent类型说明三个变量。,定义结构类型时说明变量,wang,zhang,liu;,无名结构方式说明变量,structlongnum;charname20;intage;charadd30;floatscore;wang,zhang,liu;,说明:,注意类型和变量的区别。成员项可单独使用。wang.age=20结构的成员项也可以是结构变量。,structdoccharname20;structbirthage;floatsal;structbirthintyear;intmon;intday;,结构doc中的成员项是一个birth的结构变量!,结构变量的引用,结构变量都是以成员项作为引用单位,引用方式:,结构变量名.成员项名,wang.score=100;,说明:,结构变量的成员项与普通变量有相同的性质。,结构体变量的初始化,结构变量可以在说明时赋初值,称为初始化。,structstudentlongnum;char*name;charsex3;intage;floatscore;charaddr30;wang=99010101,“王五”,“男”,20,90.5,“上海”;,结构数组,结构变量也可以构造成数组,称为结构数组。每个数组元素都是一个结构变量,都含有结构成员项。它们在内存中的地址是连续的。,数组的说明:,struct结构名结构数组名常量表达式;,structstudentlongnum;charname20;floatscore;stud3;,说明:,三个结构数组元素都含有student的成员项。结构数组名stud,代表结构数组的首地址。外部和静态结构数组在说明时可以初始化。,=99010101,“Wang”,67.5,99010102,“Zhao”,78.5,99010103,“Fang”,98.5;,举例:统计三个候选人的票数。,#include#defineNUMBER10structstudentintnum;charname20;intcount;lead3=1,“Zhang”,0,2,“Tan”,0,3,“Wang”,0;voidmain(void)inti,j,numb;for(i=0;i0)leadnumb-1.count+;elseprintf(“Selectionerrorn”);printf(“n”);for(i=0;i成员项名,结构指针主要用于对结构数组操作。,structstudocintiNum;char*name;*p,wang=2001,”wangli”;p=,举例:,#includestructsamintnum;charname20;char*addr;ws=101,“Fang”,“Shanghai”,102,“Tan”,“Bejing”,103,“Wang”,“Hefei”;voidmain(void)inti;structsam*pws;pws=ws;for(i=0;inum,pws-name,pws-addr);,定义结构,说明数组并初始化。,说明结构指针。,指针指向结构数组。,通过指针引用成员项。,CHAP7EX2,结构与函数参数,当函数需要通过形参传递一个结构时,一般有两种处理办法:,传递一个结构指针(效率高)。,#includevoidmprintp(structstudent*);structstudentlongnum;char*name;floatscore;voidmain()structstudents1;s1.num=99010101;=“wanghai”;s1.score=99;mprintp(,指向结构的指针。,传递一个结构变量(效率低)。,voidmprintp(structstudent);,s1,structstudentsv,sv.num,,sv.score,结构变量。,7.2共用体(union),概念:不同数据类型的集合;每个成员项共用一段内存空间;某一时刻只能对一个“活的active”成员项操作;,共用体类型的定义,格式:,Union共用体名type成员项1;type成员项2;type成员项n;,unionexaminta;floatb;charc;,共用体变量的说明和引用,可以用共用体类型说明:共用体变量、共用体数组、指向共用体的指针。,unionexamx,*px,y10;,引用:引用变量的成员项。,通过变量引用:变量名.成员项名通过指针引用:指针-成员项名,共用体与结构体的区别,structexaminta;floatb;charc;x;,x,a,b,c,unionexaminta;floatb;charc;x;,x,b,a,c,结构体变量的每个成员项有独立的内存单元,而共用体变量的成员项以最大的成员项开辟单元后,所有成员项共用单元。,sizeof(structexam),举例:,#includevoidmain(void)unionexaminti;charch2;x;x.i=24897;/*i:0 x6141*/printf(“i=%xHn”,x.i);printf(“ch0=%xH,ch1=%xHn”,x.ch0,x.ch1);printf(“ch0=%c,ch1=%cn”,x.ch0,x.ch1);,CHAP7EX4,0 x41,0 x61,ch0,ch1,i,x,7.3枚举类型,概念:有限状态的集合,以整型值代表。如:月份,星期。,枚举类型的定义,enum枚举类型名枚举元素表;,enumdaysun,mon,tue,wed,thv,fri,sat;,说明:,枚举元素如果不赋值,自动取0n-1整数值;,在定义时,可以对某个枚举元素赋值,其后的元素按此值,自动加一递增。,枚举变量的说明和引用,enumcolorcol1,col2;,枚举变量只能取该类型中的一个元素。,col1=red;,col2=(enumcolor)2;,enumcolorred,yellow,blue;,7.4用户定义类型,C语言可以通过typedef语句,定义自己命名的数据类型。实际上是给C类型重新起个名字。,typedef语句的格式:,typedeftype标识符;,C语言的类型名。,用户定义类型名。,引用方式:,基本类型,typedefintINTEGER;INTEGERa,b;,数组,typedefcharSTRING41;STRINGa,b;chara41,b41;,用户定义结构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论