结构体、联合体与枚举类型.ppt
《结构体、联合体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《结构体、联合体与枚举类型.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第11章结构体、联合体与枚举类型 结构体类型是结构体类型是C语言允许用户定义的又一语言允许用户定义的又一重要的构造数据类型。重要的构造数据类型。11.1 11.1 结构体的概念结构体的概念11.2 11.2 结构体数组结构体数组11.3 11.3 结构体指针结构体指针11.4 11.4 链链 表表11.5 11.5 联合体数据类型联合体数据类型11.6 11.6 枚举数据类型枚举数据类型11.7 11.7 自定义类型自定义类型 11.1 11.1 结构体的概念结构体的概念结结构构体体类类型型是是一一种种构构造造数数据据类类型型,是是数数目目固固定定,类类型型不不同同的的若若干干有有序序数数据据
2、项项的的集集合合。每每个个数数据据项项称称为为一一个个成成员员。每每一一个个成成员员可可以以是是一一个个基基本本数数据据类类型型或或者者是是一一个个构构造造类类型型。结结构构体体数数据据类类型型具具有有很很强强的的数数据据描描述述能能力力,但但C语语言言中中并并不不提提供供现现成成的的结结构构体体类类型型。因因此此,用用户户在在使使用用一一个个结结构构体体类类型型之之前前,必必须须先先定定义义它它,也也就就是是要要在在程程序序中构造所需要的数据类型。中构造所需要的数据类型。11.1.1 结构体类型的定义结构体类型的定义结构体类型定义的一般形式为:结构体类型定义的一般形式为:struct结构体类
3、型名结构体类型名类型标识符类型标识符成员名成员名1;类型标识符类型标识符成员名成员名2;类型标识符类型标识符成员名成员名n;;例如,定义一个例如,定义一个“学生信息学生信息”的结构体类型如下:的结构体类型如下:structstudentintnum;charname10;charsex;intage;charaddr50;intscore;11.1.2 结构体变量的定义、引用、初始化结构体变量的定义、引用、初始化1结构体变量的定义结构体变量的定义(1)先先定定义义结结构构体体类类型型,再再定定义义结结构构体体类类型型变量。变量。这种定义的一般形式为:这种定义的一般形式为:struct结构体类型
4、名结构体类型名结构体变量名表;结构体变量名表;如如上上面面定定义义了了“学学生生信信息息”的的结结构构体体类类型型structstudent后后,就就可可以以用用它它来来定定义义结结构构体体变变量。量。例如:例如:structstudentstul,stu2;定义了定义了stul和和stu2为为structstudent类型的变量,类型的变量,编译系统为变量编译系统为变量stul与与stu2分配存储空间时,其分配存储空间时,其存储格式与结构体类型存储格式与结构体类型structstudent所描述的保所描述的保持一致,结构体中的各个成员按要求顺序存放。持一致,结构体中的各个成员按要求顺序存放。
5、每一个每一个structstudent类型的变量占用的存储单元类型的变量占用的存储单元为为67个字节。个字节。(2)在在定定义义结结构构体体类类型型的的同同时时定定义义结结构构体体变量。变量。这种定义的一般形式为:这种定义的一般形式为:struct结构体类型名结构体类型名类型标识符类型标识符成员名成员名1;类型标识符类型标识符成员名成员名2;类型标识符类型标识符成员名成员名n;结构体变量名表结构体变量名表;例如:例如:structstudentintnum;charname10;charsex;intage;charaddr50;intscore;stu1,stu2;这种定义与前面的定义功能相
6、同,都是既定义了结构体类型这种定义与前面的定义功能相同,都是既定义了结构体类型structstudent,又定义了两个结构体变量,又定义了两个结构体变量stu1与与stu2。(3)直接定义结构体类型的变量。)直接定义结构体类型的变量。其一般形式为:其一般形式为:struct类型标识符类型标识符成员名成员名1;类型标识符类型标识符成员名成员名2;类型标识符类型标识符成员名成员名n;结构体变量名表结构体变量名表;例如:例如:structintnum;charname10;charsex;intage;charaddr50;intscore;stu1,stu2;2结构体变量的引用结构体变量的引用结构
7、体成员引用的一般形式如下:结构体成员引用的一般形式如下:结构变量名结构变量名.成员名成员名其其中中“.”为为结结构构体体成成员员运运算算符符,所所有有C语语言言运运算算符符中中它它的的优优先先级级最最高高,因因此此可可以以把把上上述述引用形式作为一个整体来看待。引用形式作为一个整体来看待。例如,例如,stu1.name、stu2.score分别表示结分别表示结构体变量构体变量stu1的成员的成员name与结构体变量与结构体变量stu2的的成员成员score。例例11.1定定义义有有关关职职工工工工资资信信息息的的结结构构体体类类型型变变量量(包包括括编编号号、姓姓名名、基基本本工工资资、附附加
8、加工工资资、水水电电费费、实实发发工工资资),为结构体变量中的成员赋值并输出其值。为结构体变量中的成员赋值并输出其值。structpersonintnum;/*职工编号职工编号*/char*name;/*姓名姓名*/floatbase;/*基本工资基本工资*/floataddition;/*附加工资附加工资*/floatcost;/*水电费水电费*/floatsalary;/*实发工资实发工资*/;main()structpersonemployeea,employeeb;employeea.num=2086;employeea.name=Zhaoxiwang;printf(inputbase
9、,addition,cost:n);scanf(f,f,f,&employeea.base,&employeea.addition,&employeea.cost);employeea.salary=employeea.base+employeea.addition-employeea.cost;employeeb=employeea;printf(Number=dnName=sn,employeeb.num,employeeb.name);.printf(Base=.2fnAddition=.2fn,employeeb.base,employeeb.addition);printf(Cost
10、=.2fnSalary=.2fn,employeeb.cost,employeeb.salary);程序运行结果为:程序运行结果为:inputbase,addition,cost:805.85,376.57,123.52 Number=2086Name=ZhaoxiwangBase=805.85Addition=376.57Cost=123.52Salary=1085.903结构体变量的初始化结构体变量的初始化结结构构体体变变量量的的初初始始化化和和对对数数组组的的初初始始化化相相类类似似。将将各各个个成成员员的的初初值值用用一一对对花花括括弧弧括括起起来来,括括弧弧内内各各数数据据项项的的数
11、数据据类类型型、顺顺序序要要和和结结构构体体类类型型说说明明中中的的成成员员类类型型相相匹匹配配,数数据据项项间间用用逗逗号号分分隔隔。如如果果初初值值的的个个数数少少于于结结构构中中成成员员的的个个数数,则则余余下下的的成成员员将将自自动动初初始始化化为为0或或NULL。例如:例如:structstudentintnum;charname10;charsex;intage;charaddr50;intscore;main()structstudentstu=1422,LinHui,M,18,ShangHai,85;printf(Number=dnName=snSex=cn,stu.num,s
12、tu.name,stu.sex);printf(Age=dnAddress=snScore=dn,stu.age,stu.addr,stu.score);程序运行结果为:程序运行结果为:Number=1422Name=LinHuiSex=MAge=18Address=ShangHaiScore=8511.1.3 结构体的嵌套结构体的嵌套结结构构体体类类型型定定义义时时,其其成成员员的的类类型型也也可可以以是是结结构构体体类类型型,即即结结构构体体类类型型定定义义是是可可以以嵌套的。结构体定义的嵌套可以是多重的。嵌套的。结构体定义的嵌套可以是多重的。例如,定义一个例如,定义一个“职工信息职工信息
13、”的结构体类型。的结构体类型。每个职工包含编号(每个职工包含编号(num)、姓名()、姓名(name)、性别)、性别(sex)、出生日期()、出生日期(birthday)、家庭住址)、家庭住址(addr)等信息。其中出生日期包括年()等信息。其中出生日期包括年(year)、)、月(月(month)、日()、日(day)3个数据项,家庭住址包个数据项,家庭住址包括城市(括城市(city)、街道()、街道(street)、门牌号码)、门牌号码(streetnum)等信息。职工信息的逻辑结构如图)等信息。职工信息的逻辑结构如图11.3所示。所示。图11.3职工信息逻辑结构显然显然“职工信息职工信息”
14、中的中的“出生日期出生日期”和和“家庭住址家庭住址”应该用应该用结构体类型描述,首先定义结构体类型结构体类型描述,首先定义结构体类型“日期日期”structdate和和“住址住址”structaddress如下。如下。structdateintyear;/*年年*/intmonth;/*月月*/intday;/*日日*/;structaddresscharcity50;/*城市城市*/charstreet50;/*街道街道*/intstreetnum;/*门牌号码门牌号码*/;然后定义结构体类型然后定义结构体类型“职工职工”structemployee如下。如下。structemployeei
15、ntnum;charname10;charsex;structdatebirthday;structaddressaddr;在结构体类型在结构体类型structemployee中,成员中,成员birthday是是structdate结构体类型,它又有自结构体类型,它又有自己的成员己的成员year、month、day,成员,成员addr是是structaddress结构体类型,它又有自己的成员结构体类型,它又有自己的成员city、street、streetnum,这就是结构体类型,这就是结构体类型的嵌套定义。的嵌套定义。对于嵌套的结构体,引用时应按照从左到对于嵌套的结构体,引用时应按照从左到右,
16、从外到内的方式,用右,从外到内的方式,用“”一级一级地运一级一级地运算,直到找到最低一级的成员。算,直到找到最低一级的成员。例如:例如:structemployeeemp;emp.num=1001;strcpy(emp.name,LiuXiaomei);emp.sex=F;emp.birthday.year=1986;emp.birthday.month=5;emp.birthday.day=18;strcpy(emp.addr.city,BeiJing);strcpy(emp.addr.street,Changanstreet);emp.addr.streetnum=168;定义了定义了st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 联合体 枚举 类型
限制150内