- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章结构和其他数据机制
裘宗燕 从问题到程序(2003 修订)第九章,结构和其他
第九章 结构和其他数据机制
第六和第七章分别介绍了数组和指针机制,本章将介绍 C 语言的其他数据定义与描述
机制,包括结构(struct )、联合(union )、枚举(enum )等。写处理复杂数据的程序往往需
要定义复杂的数据类型和结构,这时常常需要使用这些机制。在计算机领域后续的“数据结
构”等课程中也要大量使用这些机制。
本章将对这些数据机制的概念、意义和用途,以及使用它们的基本技术做一些介绍,举
一些程序实例。后续课程中将会有更多应用这些机制的实例,读者也能在各种较深入的计算
机书籍材料中看到大量的有关例子。
9.1 结构(struct )
客观世界里需要用计算机处理的数据千变万化,它们常常不是互相独立的,而是集合成
组,若干数据元素形成一个逻辑整体,元素间存在着紧密的联系。这些情况使人不得不考虑
复杂数据的处理问题。当逻辑数据体的各部分具有共同性质时,可以用数组作为组合手段(元
素“类型”相同)。但情况未必如此,也存在许多组合体,其中各数据成分的类型并不统一,
公民身份证的数据就是一个典型例子。一个身份证的数据成分包括姓名、性别、民族、出生
日期、住址、身份证号码、发证日期、有效期限和发证单位,还有一张照片等等。显然,这
样一组信息应看作一个逻辑整体,因为它们共同描述了一个居民的情况。但是,这些信息中
有字符串,有数值,可能还有图像信息(照片)等,因此不适合用数组表示。这类情况在实
际应用中非常普遍,这就要求程序语言提供相应的数据描述机制。
针对这类情况,许多高级语言提供了另一种数据机制,专门用于把多个类型可能不同的
数据对象集合起来。C 语言将这种机制称为结构(structure )。结构是由若干(可不同类型的)
数据项组合而成的复合数据对象,这些数据项称为结构的成分或成员。一个(或一类)结构
中的每个成员都给定了一个名字,通过成员名实现对结构成员的访问。
9.1.1 结构说明与变量定义
要说明一个结构,就需要描述它的各个成员的情况,包括每个成员的类型及名字。结构
描述用关键字 struct 引导,结构说明的最基本形式是:
struct { 成员说明序列 };
写在 struct 后面的部分是结构的成员说明表,它描述了被定义结构的组成,其中的每个
成员说明在形式上与变量定义一样,可以用一个类型说明一个成员,也可以用一个类型说明
几个(类型相同的)成员。下面是两个简单的结构说明:
struct {
int n;
double x, y;
};
struct {
int n;
double data[100];
};
这里的第一个结构包含三个结构成员:第一个是名字为 n 的整型成员;后面两个成员都为
双精度类型,它们的名字分别是 x 和 y。第二个结构里包含两个成员,第一个是整型成员 n,
第二个成员 data 是一个双精度数组。
1
裘宗燕 从问题到程序(2003 修订)第九章,结构和其他
在一个结构里可以有任意多个成员,这些成员可以是任何可用类型的,包括各种基本类
型的成员,指针成员或者数组成员。成员本身也可以又是结构,也可以是后面介绍的联合等
等。用 typedef 定义的类型名也可以用在这里。一个结构里的成员名字不能相互冲突。不同
的结构里完全可以包含名字相同的成员,它们是相互无关的。在上面例子里就可以看到这方
面的情况,实际程序里也常常可以看到这种情况。
定义结构变量
像上面那样单独写出的结构说明仅描述了一个结构的形式,在程序里写出这种说明并没
有实际价值。如果要在程序里使用结构,那么就需要定义结构变量(以结构为值的变量)。
把结构说明当作类型描述,在这个说明之后给出希望定义的变量的名字(标识符),就
构成了一个结构变量定义。这种描述使所定义变量成为具有相应结构的变量。例如,下面描
述的定义了两个结构变量 st1 和 st2:
struct {
文档评论(0)