版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1结构体7.1.1结构体类型说明和结构体变量定义结构体类型说明的一般形式是:struct结构体类型名{数据类型成员名;...};其中,struct是结构体类型说明的关键字;结构体类型名指明了结构体类型的名字;成员名用于标识结构体的不同成员,其数据类型是该成员所具有的基本数据类型,乃至构造类型。结构体的各个成员作为一个整体用大括号括起来,其右大括号后边的分号是系统要求的。下一页返回7.1结构体结构体变量的定义是指定某个结构体变量具有某个被说明“样板”的结构体实体。要定义一个结构体类型的变量,可采用如下方法:(1)先说明结构体类型再定义结构体变量。上面已说明的一个结构体类型structworker,可以用它来定义结构体变量。(2)直接定义结构体变量。其一般形式是:struct{成员名表;}结构体变量名表;即在结构体类型说明中不给出结构体类型名,而直接定义结构体变量。但此种类型的结构体“样板”不能再对其他结构体变量进行直接定义。上一页下一页返回7.1结构体(3)结构体类型说明与结构体变量定义同时进行。这种形式定义的一般形式是:Struct结构体类型名{成员名表;}结构体变量名表;上一页返回下一页7.1结构体关于结构体变量的定义,有以下6点需要进行说明。①结构体变量的定义只能在结构体类型说明之后进行。②结构体变量同样具有存储属性,即它们可以是外部型,自动型,静态型三种存储属性。③对结构体变量的成员分配存储空间时,是按结构体类型说明时成员的顺序进行。④可以对结构体变量的(基本类型)成员进行赋值、存取、运算,而不能对结构体变量整体进行操作。⑤结构体成员也可以是一个结构体,即结构体是可以嵌套的。⑥结构体成员名可以与程序中的变量名同名,两者代表不同的对象。下一页返回上一页7.1结构体一个结构体变量占用内存的实际大小,可以用sizeof运算符求出。sizeof是单目运算符,其优先级是第14级。sizeof运算符的功能是求出给定运算项占用内存空间的字节数。它的一般表达式形式是:sizeof(运算项);其中运算项可以是变量、数组或是结构体变量,也可以是数据类型的名称,如int、double、struct结构体类型等。上一页下一页返回7.1结构体7.1.2结构体变量的初始化和成员的引用在进行结构体变量定义的同时也可以给出每个成员的具体值,这就是结构体变量的初始化。结构体变量的初始化的一般形式是:struct结构体类型结构体变量名={初始化数据};其中,结构体变量名是要定义的结构体变量;大括号中的数据是要赋予结构体变量各成员的数据,数据的类型、顺序要与结构体类型说明的成员相匹配,数据之间用逗号分隔,右大括号后边的分号是C++语言规定所要求的。结构体成员引用的一般形式是:结构体变量名.成员名上一页下一页返回7.1结构体7.1.3结构体数组和指向结构体的指针结构体数组定义的一般形式是:struct结构体类型结构体数组名[元素个数];其中“struct结构体类型”应该是先于此定义进行说明的结构体类型,元素个数就是定义结构体数组元素所具有的个数。例如,学生档案资料的结构体类型定义如下:structstudent{charname[16];intold;charaddr[100];};其中,成员name[]为学生姓名,old表示学生的年龄,addr[]表示学生的家庭住址。上一页下一页返回7.1结构体对于结构成员的引用有以下三种等效的方式:(1)结构体变量.成员名;(2)(*结构体指针).成员名;(3)结构体指针−>成员名如果结构体指针被赋予某结构体的首地址,则下述操作的含义是:p->n;//得到指针p所指向的结构体变量中的成员n的值p->n++;//得到指针p所指向的结构体变量中的成员n的值,然后该成员再加1++p->n;//得到指针p所指向的结构体变量的成员n加1的值上一页下一页返回7.1结构体7.1.4结构体和函数调用函数时,可以把结构体变量作为参数传递给函数。也可以采用传递地址的方式,把结构体的首地址作为参数传递给函数。在被调函数中要用指向相同结构体类型的指针接收该地址量。然后通过结构体指针来处理结构体的各成员项。上一页下一页返回7.1结构体7.1.5结构体型函数和结构体指针型函数函数的返值是结构体变量时,该函数就是结构体型函数。结构体型函数说明的一般形式是:struct结构体类型函数名();结构体型函数的定义比其说明形式增加了形式参数表和函数主体部分。程序中调用结构体型函数时,应该在主调函数的数据说明部分对被调用的结构体型函数进行说明。用于接收结构体型函数返值的变量,必须是具有相同结构体类型的结构体变量。上一页下一页返回7.1结构体7.1.6结构体嵌套和位域结构体当一个结构体的成员是结构体时就构成了结构体嵌套。在数据处理中有时要使用结构体嵌套来处理较为复杂的数据。我们可以将家庭住址的邮政编码、家庭住址和电话号码组成为一个结构体类型:structaddress{charpost[8];charaddr[100];chartel[10];}将职工简况构成如下结构体类型:structpersnl{charname[20];charsex;charbirth[10];structaddresshomeaddr;charwage[8];intpersonnel;};上一页返回7.1结构体嵌套结构体的最内层成员项的引用形式为:结构体变量名.外层成员名.内层成员名…其中,外层成员名是内层结构体的结构体变量名,例如上边的homeaddr。当使用指向结构体指针时,可以用“−>”代替“.”运算符。运算符“.”和“−>”具有相同的运算优先级,结合规律是从左向右结合。多个运算符在同一个表达式中出现时,总是从左向右进行结合,从外层向内层逐层访问成员项,即访问的是最内层的成员。C++语言对结构体的嵌套层次没有明确的限制,但嵌套层次过多时会使数据结构变得复杂化,且也无此必要。使用结构体嵌套时,内层结构体类型的说明必须在外层结构体类型说明之前进行,否则将会发生错误。下一页返回7.1结构体1.位域结构体类型的说明计算机应用于过程控制、参数检测和数据通讯等领域时,要求应用程序具有对外部设备进行控制和管理的功能。它们经常使用的控制方式是向端口发送方式字或命令字,以及从端口读取状态字等。与端口有关的命令字、方式字和状态字是以二进位(bit)为单位的字段组成的数据,称为位域数据。上一页下一页返回7.1结构体2.位域结构体变量的定义位域结构体变量的定义是在位域结构体类型说明之后进行,其规则基本同结构体变量的定义。例如,上面磁带设备通道信息编码可说明为如下位域结构体类型:structdevice{unsignedactive:1;unsignedready:1;unsignedxmt_error:1;unsigneddunmybit:13;};定义位域结构体类型为device的位域结构体变量可用“structdevicedev_code;”,这样位域结构体变量dev_code就具有device位域结构体类型。上一页下一页返回7.1结构体在说明位域结构体类型时,还可以采用下述两种方法:省略位域结构体成员名,仅说明其长度。这种方法使位域结构体中的若干位不被使用。省略位域结构体成员名,其长度说明为0,使在该位域结构体成员后面定义的位域结构体从下一个“字”边界开始存放。上一页返回7.2联合体7.2.1联合体类型的说明与联合体变量的定义联合体变量也要先说明联合体类型,后定义联合体变量。联合体类型说明的一般形式是:union联合体类型名{联合体成员1数据类型联合体成员1;...联合体成员i数据类型联合体成员i;...联合体成员n数据类型联合体成员n;};下一页返回7.2联合体其中,union是联合体类型说明和定义时的关键字;联合体成员i前的数据类型是该联合体成员的数据类型,联合成员后的分号和联合体成员结束的右大括号后的分号是系统要求的。联合体类型说明联合成员的个数要求大于1。联合体类型说明中的联合体类型名是一个标识符,联合体类型的说明仅指明了联合体的“样板”,系统并不为其分配内存空间。下一页返回上一页7.2联合体联合体变量定义的格式为:[union]联合体类型名联合体变量名表;联合体变量的定义除了指明了联合体变量是属于何种联合体类型外,系统将为联合体变量分配相应的存储空间。作为联合体变量使用的例子是编译程序中的符号表处理,它随着使用环境的不同,有时是int型,有时是float型,有时也可以是指向字符型指针。符号表中联合体类型v_tag说明如下:unionv_tag{intival;floatfval;char*pval;};上一页下一页返回7.2联合体7.2.2联合体变量与结构体变量的比较1.联合体与结构体的相同之处联合体类型说明和联合体变量的定义与结构体变量形式相同。联合体变量成员的引用与结构体变量成员的引用相同。作为函数参数的传递以及函数的返值使用方法相同。联合体变量的存在性和可见性与结构体规定相同。2.联合体与结构体的不同之处联合体变量各个成员的偏移地址相同,结构体变量各个成员的偏移地址各不相同。联合体变量所占内存的大小取决于其成员中占用内存空间最大的成员的数据类型,而结构体变量所占内存空间大于或等于各成员所占内存空间的和。上一页下一页返回7.2联合体对结构体变量可按常规方式对其各成员分别赋值,对联合体变量赋值时,只能对应于联合体中的某一个成员赋值,其初值也需要用大括号括起来。在任一给定的时间内,只能有一个成员被驻留在联合体变量中。因此在引用联合体变量的成员时,必须记住当前存放于联合体变量中的成员是哪一个,结构体变量是若干成员组成的集合,它们占用各自独立的存储空间。上一页下一页返回7.2联合体7.2.3结构体中嵌套联合体一个联合体作为结构体的成员时,就是结构体中嵌套联合体。结构体中嵌套结构体时,引用其最底层成员时,其一般形式是:结构体变量名.外层成员名.内层成员名在结构体中嵌套联合体时,其引用形式是:结构体变量名.联合体变量名.联合体成员名上一页下一页返回7.2联合体7.2.4联合体中嵌套位域结构体结构体中除了可以嵌套联合体外,其实联合体中还可以嵌套结构体或位域结构体。上一页返回7.3枚举C++语言提供了枚举数据类型,所谓“枚举”,是指将变量的值一一列举出来,枚举变量的取值只限于列举出值的范围之内。7.3.1枚举类型的说明与变量的定义枚举类型说明的一般形式是:enum枚举类型名{枚举常量1[=整型常量],...枚举常量N[=整型常量]};其中enum(enumeration)是用于说明枚举类型的关键字,枚举类型名是标识符,枚举常量也是标识符,其后可以跟对枚举常量初始化的初值。下一页返回7.3枚举使用枚举变量应注意:(1)枚举类型中的成员——枚举常量之间用逗号分隔,而不像结构体或联合体的成员间用分号分隔。最后一个枚举常量后不允许带有逗号。这一点与数组初始化量各数据之间用逗号分隔相似。(2)如果枚举常量表中的枚举常量没有任何成员被赋予初值,C++编译系统在编译时对其初始化,其初始化从0开始并依次以递增1的值赋值给枚举常量表中的每个枚举常量。(3)如果要增加或减少一个枚举常量,只需要在枚举常量表中的相应位置上插入或删除一个枚举常量,重新编译后即可完成初始值的修改。上一页下一页返回7.3枚举(4)如果枚举常量表中某个枚举常量带有初值,那么其后相继出现的枚举常量的值将从该初始值开始递增。(5)枚举变量可以用定义它的枚举表中的枚举常量赋值,例如“workday=mon;”。而枚举常量是不允许对其赋值的,例如“sun=0;”“mon=1;”等都是错误的。枚举变量workday的值是1,可以用“cout<<workday;”语句输出其值为整数1。(6)由于枚举变量和枚举常量都具有一定的值,所以它们都可以作为条件表达式中的成员项。上一页下一页返回7.3枚举(7)一个整型数不能直接给一个枚举变量赋值。例如“workday=2;”是错误的。如果要将一个整数赋给一个枚举变量,应进行强制类型转换才能赋值。例如:wor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026七德面试题目及答案
- 2026三美财务面试题及答案
- 2026省府路小学入学面试题及答案
- 虚拟股权代持协议书
- 讲诚信交友协议书
- 装饰解除劳务合同范本
- 3.9 宏程序指令讲解及应用
- 2026思特沃克 面试题及答案
- 2026桐乡语文面试题库及答案
- 公共演讲技巧与魅力提升指导书
- 酒店仪容仪表礼貌礼仪培训
- 建设工程司法解释二教学课件
- 建筑设计防火规范-实施指南
- (高清版)DB11∕T 2455-2025 微型消防站建设与管理规范
- 河道治理审计报告
- 公司员工返聘管理制度
- CJ/T 462-2014直连式加压供水机组
- T/CFPA 018-2023风管感烟火灾探测器
- 智能水表与智慧水务考核试卷
- 民用航空货物运输安全保卫规则课件
- 肠梗阻导管在防治肠梗阻中的临床应用专家共识(2025版)解读
评论
0/150
提交评论