第九章结构与其他数据机制.PDFVIP

  • 2
  • 0
  • 约4.8万字
  • 约 27页
  • 2017-06-10 发布于湖北
  • 举报
裘宗燕 从问题到程序(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)

1亿VIP精品文档

相关文档