第7章用户定制数据类型讲解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章用户定制数据类型讲解

int、char、float、double等都是系统预定义的标准数据类型。程序员用这些类型声明符声明需要的变量,系统就会为它们分配相应的存储空间,按特定的存储方式进行存储,并在有关运算符作用于这些数据时进行合法性检查。 除此之外,C语言还允许程序员在一定的框架范围内定制需要的数据类型。声明了类型之后,程序员就可以使用它们来定义需要的变量,如同使用系统提供的int、char、float、double等一样。 C语言允许程序员定制的数据类型是在下面的5种类型框架内进行。这5种框架分别是: · 结构体(struct):也称集合数据类型,用于将不同类型的数据组织在一个名字下。 · 位域(bit field):结构体的一种变形,允许方便地访问字(word)中的位(bit)。 · 共用体(union):允许一个存储空间中存储不同类型的变量。 · 枚举(enumeration):用一组符号代替一组整数。 · typedef:用于为已经存在的类型定义新名字。 本章介绍这些有关知识和方法。 7.1 结构体类型基础 7.1.1 结构体类型及其定制 1. 结构体类型的概念 通过前面的学习,已经看到了使用数组这样的构造数据类型可以将多个数据用一个名字命名,为存储和处理带来很大方便。但是,现实生活中还存在着大量需要作为一个整体来处理的数据,而这些数据的类型又不相同。例如:要处理学籍数据,需要处理学生学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)和地址(addr)等数据。这样一组相互关联的数据,用简单变量存储,难以反映出它们的内在联系的,而且使程序冗长难读;而数组则无法容纳不同类型的元素。结构体(structure),也称“结构”,就是C语言提供的处理一组不同类型数据的类型。但是这种类型是需要用户自己进行定制的,因为处理学生的结构体形式与处理教师的结构体形式不同,处理人的结构体形式与处理企业、处理产品、处理公文等的结构体形式各不相同,等等。因此,在结构体的大框架内,还要根据需要具体地定制自己的结构体类型。 2. 结构体类型的定制 定制结构体类型,需要定义该结构体类型的名字以及声明组成结构体的各成员,因此它是由声明成员的一组语句组成的,形式为 例如上述处理学籍的结构体类型定制语句为: 这样就定制了一种strict的数据类型struct Student。这里,Student是数据类型名,前面的struct表明它是一种结构体类型。同样的方法可以为建立通信录定制一种数据类型struct Addr: 说明: (1)结构体类型并非只有一种,而可以有千千万万种,这是与基本类型不同的。如果说i为整型变量,那是很明确的,它占2个字节,按定点形式存放,而说x是结构体类型变量,那就不明确了,它由哪些数据项组成,占多少字节?因此光讲“结构体类型”,只是一个笼统的类型,它只表示了“由若干不同类型数据项组成的复合类型”,程序中定义和使用的应该是具体的有确定含义的结构体类型,需要程序员自己定制。 (2)一个结构体类型的标志由两个单词组成:第一个单词为关键字struct,它表明该类型是一种结构体类型;第二个单词是结构体名,如前面介绍的Student、Add,也称为“标记”或“符标”(flag),由程序设计者按标识符规则指定。这二者联合起来组成一个“类型标识符”即“类型名”。 (3)结构体的类型的含义由一些声明组成,它们定义了各成员(或称域)的类型。要注意,它们并不是变量,而是一个结构体类型中的成员,age,sex,num不能称为变量名,而是结构体类型struct person的成员名。在一个函数中,可以另外定义与结构体类型的成员相同名的变量,它们代表不同的对象。例如: (4)声明一个结构体类型,并不意味着系统将分配一段内存单元来存放各数据项成员。请注意这是声明类型而不是定义变量,声明一个类型只是表示这个类型的结构,即告诉系统它由哪些类型的成员构成,各占多少个字节,各按什么形式存储,并把它们当作一个整体来处理。应当明确,只声明类型是不分配内存单元的,例如系统声明了int,float等类型,但并不具体分配内存单元,它只反映一种数据属性,是对具体数据的“抽象”。正如同说“汽车是车”,车就是一种“抽象”,世界上只有具体的汽车、自行车、卡车、…,把“有轮子的、在地上走动的、有一定运载能力的”特征抽象为“车”。人们只有拥有具体的汽车或自行车…,才算拥有该财产。同样,一种类型只表明一种特征,如果以后定义变量为该类型,该变量应当具备这种特征,只有在定义变量以后,才占据存储单元。 (5)系统没有预先声明结构体类型,凡需使用结构体类型数据的,都必

文档评论(0)

000 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档