复杂数据类型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上一页 下一页 返回
7.1 结构体
7.1.2结构体变量的初始化和成员的引用
在进行结构体变量定义的同时也可以给出每个成员的具 体值,这就是结构体变量的初始化。结构体变量的初始 化的一般形式是:
struct结构体类型结构体变量名={初始化数据}; 其中,结构体变量名是要定义的结构体变量;大括号中
上一页 下一页 返回
7.2联合体
联合体变量定义的格式为: [union]联合体类型名联合体变量名表; 联合体变量的定义除了指明了联合体变量是属于何种联
合体类型外,系统将为联合体变量分配相应的存储空间 。作为联合体变量使用的例子是编译程序中的符号表处 理,它随着使用环境的不同,有时是int型,有时是 float型,有时也可以是指向字符型指针。符号表中联合 体类型v_tag说明 如下: unionv_tag {intival;floatfval;char*pval;};
n的值,然后该成员再加1 ++p->n;//得到指针p所指向的结构体变量的成员n
加1的值
上一页 下一页 返回
7.1 结构体
7.1.4结构体和函数
调用函数时,可以把结构体变量作为参数传递给函数。 也可以采用传递地址的方式,把结构体的首地址作为参 数传递给函数。在被调函数中要用指向相同结构体类型 的指针接收该地址量。然后通过结构体指针来处理结构 体的各成员项。
上一页 下一页 返回
7.2联合体
7.2.2联合体变量与结构体变量的比较
1.联合体与结构体的相同之处 联合体类型说明和联合体变量的定义与结构体变量形式
相同。联合体变量成员的引用与结构体变量成员的引用 相同。作为函数参数的传递以及函数的返值使用方法相 同。联合体变量的存在性和可见性与结构体规定相同。 2.联合体与结构体的不同之处 联合体变量各个成员的偏移地址相同,结构体变量各个 成员的偏移地址各不相同。联合体变量所占内存的大小 取决于其成员中占用内存空间最大的成员的数据类型, 而结构体变量所占内存空间大于或等于各成员所占内存 空间的和。
上一页 下一页 返回
7.2联合体
7.2.4联合体中嵌套位域结构体
结构体中除了可以嵌套联合体外,其实联合体中还可以 嵌套结构体或位域结构体。
上一页
返回
7.3枚举
C++语言提供了枚举数据类型,所谓“枚举”,是指将 变量的值一一列举出来,枚举变量的取值只限于列举出 值的范围之内。
7.3.1枚举类型的说明与变量的定义
上一页 下一页 返回
7.1 结构体
在说明位域结构体类型时,还可以采用下述两种方法: 省略位域结构体成员名,仅说明其长度。这种方法使位 域结构体中的若干位不被使用。省略位域结构体成员名 ,其长度说明为0,使在该位域结构体成员后面定义的位 域结构体从下一个“字”边界开始存放。
上一页
返回
7.2联合体
枚举类型说明的一般形式是: enum枚举类型名 {枚举常量1[=整型常量],...
枚举常量N[=整型常量] };
其中enum(enumeration)是用于说明枚举类型的关 键字,枚举类型名是标识符,枚举常量也是标识符,其 后可以跟对枚举常量初始化的初值。
下一页 返回
7.3枚举
使用枚举变量应注意: (1)枚举类型中的成员——枚举常量之间用逗号分隔,
下一页 返回
7.1 结构体
1.位域结构体类型的说明 计算机应用于过程控制、参数检测和数据通讯等领域时
,要求应用程序具有对外部设备进行控制和管理的功能 。它们经常使用的控制方式是向端口发送方式字或命令 字,以及从端口读取状态字等。与端口有关的命令字、 方式字和状态字是以二进位(bit)为单位的字段组成的 数据,称为位域数据。
7.1 结构体
对于结构成员的引用有以下三种等效的方式: (1)结构体变量.成员名; (2)(*结构体指针).成员名; (3)结构体指针−>成员名 如果结构体指针被赋予某结构体的首地址,则下述操作
的含义是: p->n;//得到指针p所指向的结构体变量中的成员n的
值 p->n++;//得到指针p所指向的结构体变量中的成员
上一页 下一页 返回
7.1 结构体
7.1.6结构体嵌套和位域结构体
当一个结构体的成员是结构体时就构成了结构体嵌套。 在数据处理中有时要使用结构体嵌套来处理较为复杂的 数据。我们可以将家庭住址的邮政编码、 家庭住址和电 话号码组成为一个结构体类型:
structaddress {charpost[8];charaddr[100];chartel[10];
上边的homeaddr。当使用指向结构体指针时,可以用 “−>”代替“.”运算符。运算符“.”和“−>”具有相同 的运算优先级,结合规律是从左向右结合。多个运算符 在同一个表达式中出现时,总是从左向右进行结合,从 外层向内层逐层访问成员项,即访问的是最内层的成员 。C++语言对结构体的嵌套层次没有明确的限制,但嵌 套层次过多时会使数据结构变得复杂化,且也无此必要 。使用结构体嵌套时,内层结构体类型的说明必须在外 层结构体类型说明之前进行,否则将会发生错误。
的结构体类型,元素个数就是定义结构体数组元素所具 有的个数。例如,学生档案资料的结构体类型定义如下 :structstudent {charname[16];intold;charaddr[100];}; 其中,成员name[]为学生姓名,old表示学生的年龄, addr[]表示学生的家庭住址。
上一页 下一页 返回
上一页 下一页 返回
7.1 结构体
2.位域结构体变量的定义 位域结构体变量的定义是在位域结构体类型说明之后进
行,其规则基本同结构体变量的定义。例如,上面磁带 设备通道信息编码可说明为如下位域结构体类型: structdevice {unsignedactive:1;unsignedready:1; unsignedxmt_error:1; unsigneddunmybit:13;}; 定义位域结构ቤተ መጻሕፍቲ ባይዱ类型为device的位域结构体变量可用 “structdevicedev_code;”,这样位域结构体变量 dev_code就具有device位域结构体类型。
名指明了结构体类型的名字;成员名用于标识结构体的 不同成员,其数据类型是该成员所具有的基本数据类型 ,乃至构造类型。结构体的各个成员作为一个整体用大 括号括起来,其右大括号后边的分号是系统要求的。
下一页 返回
7.1 结构体
结构体变量的定义是指定某个结构体变量具有某个被说 明“样板”的结构体实体。要定义一个结构体类型的变 量,可采用如下方法:
上一页 下一页 返回
7.1 结构体
(3)结构体类型说明与结构体变量定义同时进行。这种 形式定义的一般形式是:
Struct结构体类型名{成员名表;}结构体变量名表;
上一页 下一页 返回
7.1 结构体
关于结构体变量的定义,有以下6点需要进行说明。①结 构体变量的定义只能在结构体类型说明之后进行。②结 构体变量同样具有存储属性,即它们可以是外部型,自 动型,静态型三种存储属性。③对结构体变量的成员分 配存储空间时,是按结构体类型说明时成员的顺序进行 。④可以对结构体变量的(基本类型)成员进行赋值、 存取、运算,而不能对结构体变量整体进行操作。⑤结 构体成员也可以是一个结构体,即结构体是可以嵌套的 。⑥结构体成员名可以与程序中的变量名同名,两者代 表不同的对象。
7.2.1联合体类型的说明与联合体变量的 定义
联合体变量也要先说明联合体类型,后定义联合体变量 。联合体类型说明的一般形式是:
union联合体类型名 {联合体成员1数据类型联合体成员1;... 联合体成员i数据类型联合体成员i;... 联合体成员n数据类型联合体成员n;};
下一页 返回
7.2联合体
第 7 章 复杂数据类型
7.1 7.2 7.3 7.4
结构体 联合体 枚举 用 typedef 定义数据类型
7.1 结构体
7.1.1结构体类型说明和结构体变量定义
结构体类型说明的一般形式是: struct结构体类型名 {数据类型成员名;...}; 其中,struct是结构体类型说明的关键字;结构体类型
上一页 下一页 返回
7.1 结构体
7.1.5结构体型函数和结构体指针型函数
函数的返值是结构体变量时,该函数就是结构体型函数 。结构体型函数说明的一般形式是:
struct结构体类型函数名(); 结构体型函数的定义比其说明形式增加了形式参数表和
函数主体部分。程序中调用结构体型函数时,应该在主 调函数的数据说明部分对被调用的结构体型函数进行说 明。用于接收结构体型函数返值的变量,必须是具有相 同结构体类型的结构体变量。
} 将职工简况构成如下结构体类型:
structpersnl{charname[20];charsex; charbirth[10];structaddresshomeaddr;
charwage[8];intpersonnel;};
上一页
返回
7.1 结构体
嵌套结构体的最内层成员项的引用形式为: 结构体变量名.外层成员名.内层成员名… 其中,外层成员名是内层结构体的结构体变量名,例如
上一页 下一页 返回
7.2联合体
7.2.3结构体中嵌套联合体
一个联合体作为结构体的成员时,就是结构体中嵌套联 合体。结构体中嵌套结构体时,引用其最底层成员时, 其一般形式是:
结构体变量名.外层成员名.内层成员名 在结构体中嵌套联合体时,其引用形式是: 结构体变量名.联合体变量名.联合体成员名
其中,union是联合体类型说明和定义时的关键字;联 合体成员i前的数据类型是该联合体成
员的数据类型,联合成员后的分号和联合体成员结束的 右大括号后的分号是系统要求的。
联合体类型说明联合成员的个数要求大于1。联合体类型 说明中的联合体类型名是一个标
识符,联合体类型的说明仅指明了联合体的“样板”, 系统并不为其分配内存空间。
上一页 下一页 返回
7.1 结构体
一个结构体变量占用内存的实际大小,可以用sizeof运 算符求出。sizeof是单目运算符,其优先级是第14级。 sizeof运算符的功能是求出给定运算项占用内存空间的 字节数。它的一般表达式形式是:sizeof(运算项);其 中运算项可以是变量、数组或是结构体变量,也可以是 数据类型的名称,如int•、double、struct结构体类型 等。
而不像结构体或联合体的成员间用分号分隔。最后一个 枚举常量后不允许带有逗号。 这一点与数组初始化量各 数据之间用逗号分隔相似。 (2)如果枚举常量表中的枚举常量没有任何成员被赋予 初值,C++编译系统在编译时对其初始化,其初始化从 0开始并依次以递增1的值赋值给枚举常量表中的每个枚 举常量。 (3)如果要增加或减少一个枚举常量,只需要在枚举常 量表中的相应位置上插入或删除一个枚举常量,重新编 译后即可完成初始值的修改。
上一页 下一页 返回
7.2联合体
对结构体变量可按常规方式对其各成员分别赋值,对联 合体变量赋值时,只能对应于联合体中的某一个成员赋 值,其初值也需要用大括号括起来。在任一给定的时间 内,只能有一个成员被驻留在联合体变量中。因此在引 用联合体变量的成员时,必须记住当前存放于联合体变 量中的成员是哪一个,结构体变量是若干成员组成的集 合,它们占用各自独立的存储空间。
(1)先说明结构体类型再定义结构体变量。上面已说明 的一个结构体类型structworker,可以用它来定义结 构体变量。
(2)直接定义结构体变量。其一般形式是: struct {成员名表;}结构体变量名表; 即在结构体类型说明中不给出结构体类型名,而直接定
义结构体变量。但此种类型的结构体“样板”不能再对 其他结构体变量进行直接定义。
的数据是要赋予结构体变量各成员的数据,数据的类型 、顺序要与结构体类型说明的成员相匹配,数据之间用 逗号分隔,右大括号后边的分号是C++语言规定所要求 的。结构体成员引用的一般形式是:结构体变量名.成员 名
上一页 下一页 返回
7.1 结构体
7.1.3结构体数组和指向结构体的指针
结构体数组定义的一般形式是: struct结构体类型结构体数组名[元素个数]; 其中“struct结构体类型”应该是先于此定义进行说明
7.1 结构体
7.1.2结构体变量的初始化和成员的引用
在进行结构体变量定义的同时也可以给出每个成员的具 体值,这就是结构体变量的初始化。结构体变量的初始 化的一般形式是:
struct结构体类型结构体变量名={初始化数据}; 其中,结构体变量名是要定义的结构体变量;大括号中
上一页 下一页 返回
7.2联合体
联合体变量定义的格式为: [union]联合体类型名联合体变量名表; 联合体变量的定义除了指明了联合体变量是属于何种联
合体类型外,系统将为联合体变量分配相应的存储空间 。作为联合体变量使用的例子是编译程序中的符号表处 理,它随着使用环境的不同,有时是int型,有时是 float型,有时也可以是指向字符型指针。符号表中联合 体类型v_tag说明 如下: unionv_tag {intival;floatfval;char*pval;};
n的值,然后该成员再加1 ++p->n;//得到指针p所指向的结构体变量的成员n
加1的值
上一页 下一页 返回
7.1 结构体
7.1.4结构体和函数
调用函数时,可以把结构体变量作为参数传递给函数。 也可以采用传递地址的方式,把结构体的首地址作为参 数传递给函数。在被调函数中要用指向相同结构体类型 的指针接收该地址量。然后通过结构体指针来处理结构 体的各成员项。
上一页 下一页 返回
7.2联合体
7.2.2联合体变量与结构体变量的比较
1.联合体与结构体的相同之处 联合体类型说明和联合体变量的定义与结构体变量形式
相同。联合体变量成员的引用与结构体变量成员的引用 相同。作为函数参数的传递以及函数的返值使用方法相 同。联合体变量的存在性和可见性与结构体规定相同。 2.联合体与结构体的不同之处 联合体变量各个成员的偏移地址相同,结构体变量各个 成员的偏移地址各不相同。联合体变量所占内存的大小 取决于其成员中占用内存空间最大的成员的数据类型, 而结构体变量所占内存空间大于或等于各成员所占内存 空间的和。
上一页 下一页 返回
7.2联合体
7.2.4联合体中嵌套位域结构体
结构体中除了可以嵌套联合体外,其实联合体中还可以 嵌套结构体或位域结构体。
上一页
返回
7.3枚举
C++语言提供了枚举数据类型,所谓“枚举”,是指将 变量的值一一列举出来,枚举变量的取值只限于列举出 值的范围之内。
7.3.1枚举类型的说明与变量的定义
上一页 下一页 返回
7.1 结构体
在说明位域结构体类型时,还可以采用下述两种方法: 省略位域结构体成员名,仅说明其长度。这种方法使位 域结构体中的若干位不被使用。省略位域结构体成员名 ,其长度说明为0,使在该位域结构体成员后面定义的位 域结构体从下一个“字”边界开始存放。
上一页
返回
7.2联合体
枚举类型说明的一般形式是: enum枚举类型名 {枚举常量1[=整型常量],...
枚举常量N[=整型常量] };
其中enum(enumeration)是用于说明枚举类型的关 键字,枚举类型名是标识符,枚举常量也是标识符,其 后可以跟对枚举常量初始化的初值。
下一页 返回
7.3枚举
使用枚举变量应注意: (1)枚举类型中的成员——枚举常量之间用逗号分隔,
下一页 返回
7.1 结构体
1.位域结构体类型的说明 计算机应用于过程控制、参数检测和数据通讯等领域时
,要求应用程序具有对外部设备进行控制和管理的功能 。它们经常使用的控制方式是向端口发送方式字或命令 字,以及从端口读取状态字等。与端口有关的命令字、 方式字和状态字是以二进位(bit)为单位的字段组成的 数据,称为位域数据。
7.1 结构体
对于结构成员的引用有以下三种等效的方式: (1)结构体变量.成员名; (2)(*结构体指针).成员名; (3)结构体指针−>成员名 如果结构体指针被赋予某结构体的首地址,则下述操作
的含义是: p->n;//得到指针p所指向的结构体变量中的成员n的
值 p->n++;//得到指针p所指向的结构体变量中的成员
上一页 下一页 返回
7.1 结构体
7.1.6结构体嵌套和位域结构体
当一个结构体的成员是结构体时就构成了结构体嵌套。 在数据处理中有时要使用结构体嵌套来处理较为复杂的 数据。我们可以将家庭住址的邮政编码、 家庭住址和电 话号码组成为一个结构体类型:
structaddress {charpost[8];charaddr[100];chartel[10];
上边的homeaddr。当使用指向结构体指针时,可以用 “−>”代替“.”运算符。运算符“.”和“−>”具有相同 的运算优先级,结合规律是从左向右结合。多个运算符 在同一个表达式中出现时,总是从左向右进行结合,从 外层向内层逐层访问成员项,即访问的是最内层的成员 。C++语言对结构体的嵌套层次没有明确的限制,但嵌 套层次过多时会使数据结构变得复杂化,且也无此必要 。使用结构体嵌套时,内层结构体类型的说明必须在外 层结构体类型说明之前进行,否则将会发生错误。
的结构体类型,元素个数就是定义结构体数组元素所具 有的个数。例如,学生档案资料的结构体类型定义如下 :structstudent {charname[16];intold;charaddr[100];}; 其中,成员name[]为学生姓名,old表示学生的年龄, addr[]表示学生的家庭住址。
上一页 下一页 返回
上一页 下一页 返回
7.1 结构体
2.位域结构体变量的定义 位域结构体变量的定义是在位域结构体类型说明之后进
行,其规则基本同结构体变量的定义。例如,上面磁带 设备通道信息编码可说明为如下位域结构体类型: structdevice {unsignedactive:1;unsignedready:1; unsignedxmt_error:1; unsigneddunmybit:13;}; 定义位域结构ቤተ መጻሕፍቲ ባይዱ类型为device的位域结构体变量可用 “structdevicedev_code;”,这样位域结构体变量 dev_code就具有device位域结构体类型。
名指明了结构体类型的名字;成员名用于标识结构体的 不同成员,其数据类型是该成员所具有的基本数据类型 ,乃至构造类型。结构体的各个成员作为一个整体用大 括号括起来,其右大括号后边的分号是系统要求的。
下一页 返回
7.1 结构体
结构体变量的定义是指定某个结构体变量具有某个被说 明“样板”的结构体实体。要定义一个结构体类型的变 量,可采用如下方法:
上一页 下一页 返回
7.1 结构体
(3)结构体类型说明与结构体变量定义同时进行。这种 形式定义的一般形式是:
Struct结构体类型名{成员名表;}结构体变量名表;
上一页 下一页 返回
7.1 结构体
关于结构体变量的定义,有以下6点需要进行说明。①结 构体变量的定义只能在结构体类型说明之后进行。②结 构体变量同样具有存储属性,即它们可以是外部型,自 动型,静态型三种存储属性。③对结构体变量的成员分 配存储空间时,是按结构体类型说明时成员的顺序进行 。④可以对结构体变量的(基本类型)成员进行赋值、 存取、运算,而不能对结构体变量整体进行操作。⑤结 构体成员也可以是一个结构体,即结构体是可以嵌套的 。⑥结构体成员名可以与程序中的变量名同名,两者代 表不同的对象。
7.2.1联合体类型的说明与联合体变量的 定义
联合体变量也要先说明联合体类型,后定义联合体变量 。联合体类型说明的一般形式是:
union联合体类型名 {联合体成员1数据类型联合体成员1;... 联合体成员i数据类型联合体成员i;... 联合体成员n数据类型联合体成员n;};
下一页 返回
7.2联合体
第 7 章 复杂数据类型
7.1 7.2 7.3 7.4
结构体 联合体 枚举 用 typedef 定义数据类型
7.1 结构体
7.1.1结构体类型说明和结构体变量定义
结构体类型说明的一般形式是: struct结构体类型名 {数据类型成员名;...}; 其中,struct是结构体类型说明的关键字;结构体类型
上一页 下一页 返回
7.1 结构体
7.1.5结构体型函数和结构体指针型函数
函数的返值是结构体变量时,该函数就是结构体型函数 。结构体型函数说明的一般形式是:
struct结构体类型函数名(); 结构体型函数的定义比其说明形式增加了形式参数表和
函数主体部分。程序中调用结构体型函数时,应该在主 调函数的数据说明部分对被调用的结构体型函数进行说 明。用于接收结构体型函数返值的变量,必须是具有相 同结构体类型的结构体变量。
} 将职工简况构成如下结构体类型:
structpersnl{charname[20];charsex; charbirth[10];structaddresshomeaddr;
charwage[8];intpersonnel;};
上一页
返回
7.1 结构体
嵌套结构体的最内层成员项的引用形式为: 结构体变量名.外层成员名.内层成员名… 其中,外层成员名是内层结构体的结构体变量名,例如
上一页 下一页 返回
7.2联合体
7.2.3结构体中嵌套联合体
一个联合体作为结构体的成员时,就是结构体中嵌套联 合体。结构体中嵌套结构体时,引用其最底层成员时, 其一般形式是:
结构体变量名.外层成员名.内层成员名 在结构体中嵌套联合体时,其引用形式是: 结构体变量名.联合体变量名.联合体成员名
其中,union是联合体类型说明和定义时的关键字;联 合体成员i前的数据类型是该联合体成
员的数据类型,联合成员后的分号和联合体成员结束的 右大括号后的分号是系统要求的。
联合体类型说明联合成员的个数要求大于1。联合体类型 说明中的联合体类型名是一个标
识符,联合体类型的说明仅指明了联合体的“样板”, 系统并不为其分配内存空间。
上一页 下一页 返回
7.1 结构体
一个结构体变量占用内存的实际大小,可以用sizeof运 算符求出。sizeof是单目运算符,其优先级是第14级。 sizeof运算符的功能是求出给定运算项占用内存空间的 字节数。它的一般表达式形式是:sizeof(运算项);其 中运算项可以是变量、数组或是结构体变量,也可以是 数据类型的名称,如int•、double、struct结构体类型 等。
而不像结构体或联合体的成员间用分号分隔。最后一个 枚举常量后不允许带有逗号。 这一点与数组初始化量各 数据之间用逗号分隔相似。 (2)如果枚举常量表中的枚举常量没有任何成员被赋予 初值,C++编译系统在编译时对其初始化,其初始化从 0开始并依次以递增1的值赋值给枚举常量表中的每个枚 举常量。 (3)如果要增加或减少一个枚举常量,只需要在枚举常 量表中的相应位置上插入或删除一个枚举常量,重新编 译后即可完成初始值的修改。
上一页 下一页 返回
7.2联合体
对结构体变量可按常规方式对其各成员分别赋值,对联 合体变量赋值时,只能对应于联合体中的某一个成员赋 值,其初值也需要用大括号括起来。在任一给定的时间 内,只能有一个成员被驻留在联合体变量中。因此在引 用联合体变量的成员时,必须记住当前存放于联合体变 量中的成员是哪一个,结构体变量是若干成员组成的集 合,它们占用各自独立的存储空间。
(1)先说明结构体类型再定义结构体变量。上面已说明 的一个结构体类型structworker,可以用它来定义结 构体变量。
(2)直接定义结构体变量。其一般形式是: struct {成员名表;}结构体变量名表; 即在结构体类型说明中不给出结构体类型名,而直接定
义结构体变量。但此种类型的结构体“样板”不能再对 其他结构体变量进行直接定义。
的数据是要赋予结构体变量各成员的数据,数据的类型 、顺序要与结构体类型说明的成员相匹配,数据之间用 逗号分隔,右大括号后边的分号是C++语言规定所要求 的。结构体成员引用的一般形式是:结构体变量名.成员 名
上一页 下一页 返回
7.1 结构体
7.1.3结构体数组和指向结构体的指针
结构体数组定义的一般形式是: struct结构体类型结构体数组名[元素个数]; 其中“struct结构体类型”应该是先于此定义进行说明