




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、人民邮电出版社第十章 用户定义数据类型人民邮电出版社10.1 结构结构(Structure)10.2 位域位域(Bit_Fields)10.3 联合联合(Unions)10.4 枚举枚举(Enumerations)人民邮电出版社10.1 结构结构(Structure)110.11.1 1 结构的定义、结构变量说明和结构变量成结构的定义、结构变量说明和结构变量成员的访问员的访问 结构是不同数据类型的数据集合。与数组相比,结构是不同数据类型的数据集合。与数组相比,数组是相同数据类型数据的集合。数组中的数据是相数组是相同数据类型数据的集合。数组中的数据是相互关联的。互关联的。 人民邮电出版社1. 结
2、构的定义结构的定义 结构是一个基本类型数据的变量集,它有一个结构是一个基本类型数据的变量集,它有一个名字,称为结构名。结构中的各变量,在逻辑上,名字,称为结构名。结构中的各变量,在逻辑上,一般都有一定的内在联系。组成结构的各变量,称一般都有一定的内在联系。组成结构的各变量,称作结构元素或结构成员。作结构元素或结构成员。 结构定义类型,是通过结构定义语句完成的,结构定义类型,是通过结构定义语句完成的,其定义的关键字是其定义的关键字是struct。定义结构的一般形式为:。定义结构的一般形式为: struct 结构名 数据类型 成员名; ;人民邮电出版社2. 结构类型变量的定义结构类型变量的定义 第
3、一种定义形式:与一般变量的类型定义的方第一种定义形式:与一般变量的类型定义的方法一样。法一样。 第二种定义形式:在定义结构的同时,将要定第二种定义形式:在定义结构的同时,将要定义为结构类型的变量直接写在该结构定义的右花括义为结构类型的变量直接写在该结构定义的右花括号之后,最后再以分号结束语句。号之后,最后再以分号结束语句。 人民邮电出版社3. 结构成员的访问结构成员的访问 在程序中,我们引用结构的成员时,使用在程序中,我们引用结构的成员时,使用如下的引用方式:如下的引用方式: 结构变量名结构变量名.结构成员名结构成员名 其中其中“.”是成员选择符是成员选择符(或称点操作符,或称点操作符,成员运
4、算符成员运算符)。 人民邮电出版社110.11.2 2 结构变量的初始化结构变量的初始化 结构变量初始化的方法,与结构变量定义采用结构变量初始化的方法,与结构变量定义采用的形式相对应。的形式相对应。 人民邮电出版社110.11.3 3 结构数组结构数组 结构数组的定义结构数组的定义 结构类型变量可以是数组。这样的数组称为结结构类型变量可以是数组。这样的数组称为结构数组。所谓结构数组,是这样一种数组,它的每构数组。所谓结构数组,是这样一种数组,它的每个元素都是同一类型的结构。个元素都是同一类型的结构。 应用结构数组时,首先是定义结构,然后将数应用结构数组时,首先是定义结构,然后将数组变量说明为该
5、结构类型。组变量说明为该结构类型。 人民邮电出版社110.11.4 4 把结构传递给函数把结构传递给函数 结构变量既可以作为函数的参数,也可以作为函结构变量既可以作为函数的参数,也可以作为函数的返回值。将结构类型变量作为函数的参数时,可数的返回值。将结构类型变量作为函数的参数时,可有两种情况:形参是结构的元素和形参是整个结构。有两种情况:形参是结构的元素和形参是整个结构。现分述如下。现分述如下。人民邮电出版社1. 把结构元素传递给函数把结构元素传递给函数 把结构变量的指定元素传递给函数,可以通过把结构变量的指定元素传递给函数,可以通过值调用实现,也可以通过引用调用实现。值调用实现,也可以通过引
6、用调用实现。 (1) 值调用值调用 值调用就是把元素的值传递给函数,如同传递值调用就是把元素的值传递给函数,如同传递一个简单变量。一个简单变量。 (2) 引用调用引用调用 当希望传递结构元素的地址给函数时,要采用当希望传递结构元素的地址给函数时,要采用引用调用。这时必须在变量名前加一个操作符引用调用。这时必须在变量名前加一个操作符&。2. 把整个结构传递给函数把整个结构传递给函数 整个结构作为实参向函数传递时,实参和形参整个结构作为实参向函数传递时,实参和形参的结构类型必须匹配,这里只介绍采用值调用的情的结构类型必须匹配,这里只介绍采用值调用的情况。况。 人民邮电出版社110.11.5
7、 结构指针结构指针1. 结构指针说明结构指针说明 使用结构指针之前,先要定义结构指针变量。使用结构指针之前,先要定义结构指针变量。 定义的格式是把符号定义的格式是把符号“* ”放在要定义的指针变量名放在要定义的指针变量名的前面。其一般形式如下:的前面。其一般形式如下: struct 结构名 *指针变量名;人民邮电出版社2. 结构指针的应用结构指针的应用 结构指针主要有两个方面的应用:对函数的结构指针主要有两个方面的应用:对函数的引用调用和在链表或动态数据结构中的应用。引用调用和在链表或动态数据结构中的应用。(1) 函数的引用调用函数的引用调用 把整个结构作为函数的参数传递给函数的缺把整个结构作
8、为函数的参数传递给函数的缺点是,全部结构元素的压入堆栈和弹出堆栈的开点是,全部结构元素的压入堆栈和弹出堆栈的开销很大。销很大。 人民邮电出版社 第一种方法是使用指针运算符第一种方法是使用指针运算符*。例如,。例如, (*p).name 表示访问指针表示访问指针p所指结构的成员所指结构的成员name。注意,。注意,这里的圆括号是必须的。它表示先访问指针变量所这里的圆括号是必须的。它表示先访问指针变量所指向的结构。指向的结构。 第二种方法是使用指向结构成员运算符第二种方法是使用指向结构成员运算符(由一减号和一大于号组成由一减号和一大于号组成)。例如,访问指针。例如,访问指针p所所指结构的成员指结构
9、的成员name,可写为:,可写为: p name这两种写法是等价的。这两种写法是等价的。人民邮电出版社3. 结构指针作为函数返回值结构指针作为函数返回值 我们已经知道,函数的返回值可以是指针。结我们已经知道,函数的返回值可以是指针。结构指针也不例外。用于接收函数返回值的变量,必构指针也不例外。用于接收函数返回值的变量,必须是具有相同结构类型的结构指针变量。须是具有相同结构类型的结构指针变量。 主函数的输出结构的数据时,使用了两种访问主函数的输出结构的数据时,使用了两种访问结构成员的形式:结构成员的形式: samp_ptr-a (*samp_ptr).b 其效果是一样的。其效果是一样的。人民邮电
10、出版社10.2 位域位域(Bit_Fields) C语言的特点之一,语言的特点之一, 是它能对字节或字节中是它能对字节或字节中的一位或多位进行操作。这种以的一位或多位进行操作。这种以bit表示操作对表示操作对象的能力,给程序设计带来很大方便。象的能力,给程序设计带来很大方便。 人民邮电出版社110.22.1 1 位域结构的定义位域结构的定义 位域是这样一种数据结构,它定义每个元素位域是这样一种数据结构,它定义每个元素的的(二进制二进制)位数。位域结构定义的一般形式为:位数。位域结构定义的一般形式为: struct name type name1:length; type name2:lengt
11、h; type nameN:length; 定义位域的关键字也是定义位域的关键字也是struct。 人民邮电出版社 各成员的值,按照定义的顺序,在一个字的各成员的值,按照定义的顺序,在一个字的各位中逐个存放。例如:各位中逐个存放。例如: struct bit_data unsigned a:2 unsigned b:1 unsigned c:3 ;人民邮电出版社110.22.2 2 位域结构变量的说明位域结构变量的说明 位域类型变量的说明方法与结构类型变量的说明方法是一位域类型变量的说明方法与结构类型变量的说明方法是一样的。样的。 struct bit_data data1,data2;其一般
12、形式为:其一般形式为: struct 位域类型名位域类型名 变量名表;变量名表;位域类型变量也可以在定义位域类型的同时进行说明。其一般位域类型变量也可以在定义位域类型的同时进行说明。其一般形式为:形式为: struct 位域类型名位域类型名 unsigned a:2 unsigned b:1 unsigned c:3 位域类型变量名表位域类型变量名表;人民邮电出版社110.22.3 3 位域变量的引用位域变量的引用 位域变量成员的引用,也与结构一样,可以位域变量成员的引用,也与结构一样,可以用圆点用圆点“.”运算符来表示。例如,访问前面例子中运算符来表示。例如,访问前面例子中变量变量data1
13、的成员的成员a: data1.a 又如对其赋值,可写为:又如对其赋值,可写为: data1.a=1;人民邮电出版社10.3 联合联合(Unions)110.33.1 1 联合类型的定义联合类型的定义 联合类型是在同一个存储空间,可以为几个不联合类型是在同一个存储空间,可以为几个不同数据类型的成员所使用。联合类型的定义与结构同数据类型的成员所使用。联合类型的定义与结构类似,其一般形式为:类似,其一般形式为: union 联合类型名 数 据 类 型 成 员 名 ( 变 量 ) ; ;人民邮电出版社 这两个不同类型的变量共同使用一个这两个不同类型的变量共同使用一个存储单元,如图存储单元,如图10.3
14、所示。所示。图10.3 联合类型示意图 人民邮电出版社110.33.2 2 联合类型变量的说明联合类型变量的说明 联合类型定义后,就可以对该数据类型变量进联合类型定义后,就可以对该数据类型变量进行说明。和结构一样,联合数据类型变量的说明也行说明。和结构一样,联合数据类型变量的说明也有两种方式。第一种方式是,把被说明的联合类型有两种方式。第一种方式是,把被说明的联合类型变量写在联合类型定义的右花括号之后,例如下面变量写在联合类型定义的右花括号之后,例如下面定义了两个联合类型定义了两个联合类型u的变量的变量u_a和和u_b: union u int i; char ch; u_a,u_b;人民邮电
15、出版社 第二种方法是,写一个单独的联合类型变第二种方法是,写一个单独的联合类型变量定义语句。例如:量定义语句。例如: union u u_a, u_b; 在定义一个联合类型变量时,编译器产生在定义一个联合类型变量时,编译器产生一个能够存放联合成员中最长变量的空间,供一个能够存放联合成员中最长变量的空间,供各成员共同使用。各成员共同使用。人民邮电出版社110.33.3 3 联合类型变量的引用联合类型变量的引用 访问联合类型变量的语法形式,与访问结构访问联合类型变量的语法形式,与访问结构类型变量的成员一样,使用点操作符或箭头操作类型变量的成员一样,使用点操作符或箭头操作符。符。 两种引用的格式如下
16、:两种引用的格式如下: 联合变量名联合变量名.成员名成员名 指向联合的指针变量名指向联合的指针变量名-成员名成员名 联合类型的特点是在同一个存储空间,可以联合类型的特点是在同一个存储空间,可以存储若干个数据存储若干个数据(包括不同类型的数据包括不同类型的数据)。但是,它。但是,它不能同时存放几个数据。在同一时间只能存放一不能同时存放几个数据。在同一时间只能存放一个数据。个数据。人民邮电出版社10.4 枚举枚举(Enumerations)110.44.1 1 枚举类型的定义枚举类型的定义 枚举类型是一个用名字代表整型常量的集合:它枚举类型是一个用名字代表整型常量的集合:它的关键字是的关键字是enum。枚举类型定义的一般格式为:。枚举类型定义的一般格式为: enum enum_type_name enumeration list ); 其中其中enum_type_name是所定义的枚举类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论