用户定义数据类型学习教案_第1页
用户定义数据类型学习教案_第2页
用户定义数据类型学习教案_第3页
用户定义数据类型学习教案_第4页
用户定义数据类型学习教案_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1用户用户(yngh)定义数据类型定义数据类型第一页,共26页。10.1 结构结构(jigu)(Structure)10.2 位域位域(Bit_Fields)10.3 联合联合(Unions)10.4 枚举枚举(Enumerations)第1页/共26页第二页,共26页。10.1 结构结构(jigu)(Structure)110.11.1 1 结构的定义、结构变量说明和结构变量成员的访问结构的定义、结构变量说明和结构变量成员的访问 结构是不同数据类型的数据集合。与数组相比结构是不同数据类型的数据集合。与数组相比( (xin b b) ),数组是相同数据类型数据的集合。数组中的数据是相互关

2、联的。,数组是相同数据类型数据的集合。数组中的数据是相互关联的。 第2页/共26页第三页,共26页。1. 结构的定义结构的定义 结构是一个基本结构是一个基本(jbn)类型数据的变量集,它有一个名字,称为结构名。结构中的各变量,在逻辑上,一般都有一定的内在联系。组成结构的各变量,称作结构元素或结构成员。类型数据的变量集,它有一个名字,称为结构名。结构中的各变量,在逻辑上,一般都有一定的内在联系。组成结构的各变量,称作结构元素或结构成员。 结构定义类型,是通过结构定义语句完成的,其定义的关键字是结构定义类型,是通过结构定义语句完成的,其定义的关键字是struct。定义结构的一般形式为:。定义结构的

3、一般形式为: struct 结构名结构名 数据类型数据类型 成员名;成员名; ;第3页/共26页第四页,共26页。2. 结构类型变量的定义结构类型变量的定义 第一种定义形式:与一般变量的类型定义的方法第一种定义形式:与一般变量的类型定义的方法(fngf)一样。一样。 第二种定义形式:在定义结构的同时,将要定义为结构类型的变量直接写在该结构定义的右花括号之后,最后再以分号结束语句。第二种定义形式:在定义结构的同时,将要定义为结构类型的变量直接写在该结构定义的右花括号之后,最后再以分号结束语句。 第4页/共26页第五页,共26页。3. 结构成员的访问结构成员的访问 在程序中,我们引用结构的成员时,

4、使用如下的引用方式在程序中,我们引用结构的成员时,使用如下的引用方式(fngsh): 结构变量名结构变量名.结构成员名结构成员名 其中其中“.”是成员选择符是成员选择符(或称点操作符,成员运算符或称点操作符,成员运算符)。 第5页/共26页第六页,共26页。110.11.2 2 结构变量的初始化结构变量的初始化 结构变量初始化的方法,与结构变量定义采用结构变量初始化的方法,与结构变量定义采用(c(ciyng) )的形式相对应。的形式相对应。 第6页/共26页第七页,共26页。110.11.3 3 结构数组结构数组 结构数组的定义结构数组的定义 结构类型变量可以是数组。这样的数组称为结构数组。所

5、谓结构数组,是这样一种数组,它的每个元素都是同一结构类型变量可以是数组。这样的数组称为结构数组。所谓结构数组,是这样一种数组,它的每个元素都是同一(t(tngy) )类型的结构。类型的结构。 应用结构数组时,首先是定义结构,然后将数组变量说明为该结构类型。应用结构数组时,首先是定义结构,然后将数组变量说明为该结构类型。 第7页/共26页第八页,共26页。110.11.4 4 把结构传递给函数把结构传递给函数 结构变量既可以作为函数的参数结构变量既可以作为函数的参数(c(cnshsh) ),也可以作为函数的返回值。将结构类型变量作为函数的参数,也可以作为函数的返回值。将结构类型变量作为函数的参数

6、(c(cnshsh) )时,可有两种情况:形参是结构的元素和形参是整个结构。现分述如下。时,可有两种情况:形参是结构的元素和形参是整个结构。现分述如下。第8页/共26页第九页,共26页。1. 把结构元素传递给函数把结构元素传递给函数 把结构变量的指定元素传递给函数,可以通过值调用实现,也可以通过引用把结构变量的指定元素传递给函数,可以通过值调用实现,也可以通过引用(ynyng)调用实现。调用实现。 (1) 值调用值调用 值调用就是把元素的值传递给函数,如同传递一个简单变量。值调用就是把元素的值传递给函数,如同传递一个简单变量。 (2) 引用引用(ynyng)调用调用 当希望传递结构元素的地址给

7、函数时,要采用引用当希望传递结构元素的地址给函数时,要采用引用(ynyng)调用。这时必须在变量名前加一个操作符调用。这时必须在变量名前加一个操作符&。2. 把整个结构传递给函数把整个结构传递给函数 整个结构作为实参向函数传递时,实参和形参的结构类型必须匹配,这里只介绍采用值调用的情况。整个结构作为实参向函数传递时,实参和形参的结构类型必须匹配,这里只介绍采用值调用的情况。 第9页/共26页第十页,共26页。110.11.5 结构指针结构指针11. 结构指针说明结构指针说明 使用结构指针之前,先要定义结构指针变量。使用结构指针之前,先要定义结构指针变量。 定义的格式定义的格式( (g

8、sh shi) )是把符号是把符号“* ”放在要定义的指针变量名的前面。其一般形式如下:放在要定义的指针变量名的前面。其一般形式如下: struct struct 结构名结构名 *指针变量名;指针变量名;第10页/共26页第十一页,共26页。2. 结构指针的应用结构指针的应用 结构指针主要有两个方面的应用:对函数的引用调用和在链表或动态数据结构中的应用。结构指针主要有两个方面的应用:对函数的引用调用和在链表或动态数据结构中的应用。(1) 函数的引用调用函数的引用调用 把整个结构作为函数的参数传递给函数的缺点是,全部结构元素把整个结构作为函数的参数传递给函数的缺点是,全部结构元素(yun s)的

9、压入堆栈和弹出堆栈的开销很大。的压入堆栈和弹出堆栈的开销很大。 第11页/共26页第十二页,共26页。 第一种方法是使用指针运算符第一种方法是使用指针运算符*。例如,。例如, (*p).name 表示访问指针表示访问指针p所指结构的成员所指结构的成员name。注意,这里的圆括号是必须的。它表示先访问指针变量所指向的结构。注意,这里的圆括号是必须的。它表示先访问指针变量所指向的结构。 第二种方法是使用指向结构成员运算符第二种方法是使用指向结构成员运算符(由一减号和一大于号组成由一减号和一大于号组成)。例如,访问指针。例如,访问指针p所指结构的成员所指结构的成员name,可写为:,可写为: p n

10、ame这两种写法这两种写法(xif)是等价的。是等价的。第12页/共26页第十三页,共26页。3. 结构指针作为函数返回值结构指针作为函数返回值 我们已经知道,函数的返回值可以是指针。结构指针也不例外。用于接收函数返回值的变量,必须是具有相同结构类型的结构指针变量。我们已经知道,函数的返回值可以是指针。结构指针也不例外。用于接收函数返回值的变量,必须是具有相同结构类型的结构指针变量。 主函数的输出结构的数据时,使用了两种访问结构成员主函数的输出结构的数据时,使用了两种访问结构成员(chngyun)的形式:的形式: samp_ptr-a (*samp_ptr).b 其效果是一样的。其效果是一样的

11、。第13页/共26页第十四页,共26页。10.2 位域位域(Bit_Fields) C语言的特点之一,语言的特点之一, 是它能对字节是它能对字节(z ji)或字节或字节(z ji)中的一位或多位进行操作。这种以中的一位或多位进行操作。这种以bit表示操作对象的能力,给程序设计带来很大方便。表示操作对象的能力,给程序设计带来很大方便。 第14页/共26页第十五页,共26页。110.22.1 1 位域结构的定义位域结构的定义 位域是这样位域是这样( (zh hyng) )一种数据结构,它定义每个元素的一种数据结构,它定义每个元素的( (二进制二进制) )位数。位域结构定义的一般形式为:位数。位域结

12、构定义的一般形式为: struct struct namame t typ pe namame11:l lengthth; t typ pe namame22:l lengthth; t typ pe namameNN:l lengthth; 定义位域的关键字也是定义位域的关键字也是structstruct。 第15页/共26页第十六页,共26页。 各成员各成员(chngyun)的值,按照定义的顺序,在一个字的各位中逐个存放。例如:的值,按照定义的顺序,在一个字的各位中逐个存放。例如: struct bit_data unsigned a:2 unsigned b:1 unsigned c:3

13、 ;第16页/共26页第十七页,共26页。110.22.2 2 位域结构变量的说明位域结构变量的说明 位域类型位域类型(l(lixng) )变量的说明方法与结构类型变量的说明方法与结构类型(l(lixng) )变量的说明方法是一样的。变量的说明方法是一样的。 struct b struct bit t_data ata data1ata1,data2ata2;其一般形式为:其一般形式为: struct struct 位域类型位域类型(l(lixng) )名名 变量名表;变量名表;位域类型位域类型(l(lixng) )变量也可以在定义位域类型变量也可以在定义位域类型(l(lixng) )的同时进

14、行说明。其一般形式为:的同时进行说明。其一般形式为: struct struct 位域类型位域类型(l(lixng) )名名 u uns signed a a:22 u uns signed b b:11 u uns signed c c:33 位域类型位域类型(l(lixng) )变量名表变量名表;第17页/共26页第十八页,共26页。110.22.3 3 位域变量的引用位域变量的引用( (ynyng) ) 位域变量成员的引用位域变量成员的引用( (ynyng) ),也与结构一样,可以用圆点,也与结构一样,可以用圆点“.”运算符来表示。例如,访问前面例子中变量运算符来表示。例如,访问前面例子

15、中变量data1ata1的成员的成员aa: data1ata1.aa 又如对其赋值,可写为:又如对其赋值,可写为: data1ata1.aa=11;第18页/共26页第十九页,共26页。10.3 联合联合(linh)(Unions)110.33.1 1 联合类型的定义联合类型的定义 联合类型是在同一个存储空间,可以为几个联合类型是在同一个存储空间,可以为几个( (j ) )不同数据类型的成员所使用。联合类型的定义与结构类似,其一般形式为:不同数据类型的成员所使用。联合类型的定义与结构类似,其一般形式为: u unio on 联合类型名联合类型名 数据类型数据类型 成员名成员名( (变量变量)

16、); ;第19页/共26页第二十页,共26页。 这两个这两个(lin )不同类型的变量共同使用一个存储单元,如图不同类型的变量共同使用一个存储单元,如图10.3所示。所示。图10.3 联合(linh)类型示意图 第20页/共26页第二十一页,共26页。110.33.2 2 联合类型变量的说明联合类型变量的说明 联合类型定义后,就可以对该数据类型变量进行说明。和结构一样,联合数据类型变量的说明也有两种方式。第一种方式是,把被说明的联合类型变量写在联合类型定义的右花括号之后联合类型定义后,就可以对该数据类型变量进行说明。和结构一样,联合数据类型变量的说明也有两种方式。第一种方式是,把被说明的联合类

17、型变量写在联合类型定义的右花括号之后( (zh hh hu)u),例如下面定义了两个联合类型,例如下面定义了两个联合类型u u的变量的变量u u_aa和和u u_b b: u unio on u u int t i; char ch char ch; u u_aa,u u_b b;第21页/共26页第二十二页,共26页。 第二种方法是,写一个单独的联合类型变量定义语句。例如:第二种方法是,写一个单独的联合类型变量定义语句。例如: union u u_a, u_b; 在定义一个联合类型变量时,编译器产生一个能够存放联合成员在定义一个联合类型变量时,编译器产生一个能够存放联合成员(chngyun)

18、中最长变量的空间,供各成员中最长变量的空间,供各成员(chngyun)共同使用。共同使用。第22页/共26页第二十三页,共26页。110.33.3 3 联合类型变量的引用联合类型变量的引用 访问联合类型变量的语法形式,与访问结构类型变量的成员一样,使用点操作符或箭头操作符。访问联合类型变量的语法形式,与访问结构类型变量的成员一样,使用点操作符或箭头操作符。 两种引用的格式如下:两种引用的格式如下: 联合变量名联合变量名.成员名成员名 指向联合的指针变量名指向联合的指针变量名- 成员名成员名 联合类型的特点是在同一个存储空间,可以存储若干个数据联合类型的特点是在同一个存储空间,可以存储若干个数据(sh(shj)()(包括不同类型的数据包括不同类型的数据(sh(shj)。但是,它不能同时存放几个数据。但是,它不能同时存放几个数据(sh(shj) )。在同一时间只能存放一个数据。在同一时间只能存放一个数据(sh(shj) )。第23页/共26页第二十四页,共26页。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论