第十一章结构类型及其它构造类型在实际生活中,有着大量由不同性质的数据构成的实体,如日期就是由年、月、日组成的,通信录就是由姓名、地址、电话、邮政编码等组成的,对于象日期或通信录这样的实体,用数组是难于描述的。因此,在C语言中提供了一种新的称为结构的构造型数据类型。结构是一组相关的不同类型的数据的集合。结构类型为处理复杂的数据提供了便利的手段。本章详细讨论结构的定义、说明和使用,结构与数组和指针等基本问题,并介绍联合的基本概念,以及怎样用 typedef 定义新的类型。上一页下一页 结构类型 结构类型的概念与定义结构与数组类似,都是由若干分量组成的。数组是由相同类型的数组元素组成,但结构的分量可以是不同类型的,结构中的分量称为结构的成员。访问数组中的分量(元素)是通过数组的下标,而访问结构中的成员是通过成员的名字。在程序中使用结构之前,首先要对结构的组成进行描述,称为结构的定义。结构的定义说明了该结构的组成成员,以及每个成员的数据类型。结构定义的一般形式如下: struct 结构类型名称{数据类型成员名 1; 数据类型成员名 2; ……数据类型成员名 n; };其中: struct 为关键字,是结构的标识符;结构类型名称是所定义的结构的类型标识,由用户自己定义;{}中包围的是组成该结构的成员项;每个成员的数据类型既可以是简单的数据类型,也可以是复杂的数据类型。整个定义作为一个完整的语句用分号结束。结构类型名称是可以省略的,此时定义的结构称为无名结构。虽然结构定义时并不要求其内部成员之间有任何内在的联系,但一般来说,结构中所有的成员在逻辑上都是彼此紧密相关的,将毫无任何逻辑关系的一组成员放入同一结构中没有任何实际意义。为了描述日期可以定义如下结构: struct date { int year; /*年:整型作为结构中的成员*/ int month; /*月*/ int day; /*日*/ };在这个结构定义中,结构类型名称为 date ,可以称这个结构类型为 date 。在 date 结构中, 有三个成员 year , month 和 day ,三个成员均为整型。为了处理通信录,可以定义如下结构: struct address { char name[30]; /*姓名。字符数组作为结构中的成员*/ char street[40]; /*街道名称*/ char city[20]; /*城市*/ char state[2]; /*省市代码*/ unsigned long zip; /*邮政编码。无符号长整型作为结构中的成员*/ };结构的定义明确了结构的组成形式,定义了一种C语言中原来没有、而用户实际需要的新的数据类型。与其他的数据类型不同,在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间。在程序中,结构的定义可以在一个函数的内部,也可以在所有函数的外部,在函数内部定义的结构,仅在该函数内部有效,而定义在外部的结构,在所有函数中都可以使用。上一页下一页 结构数组结构与数组的关系有两重:其一是在结构中使用数组类型作为结构的一个成员;其二是用结构类型作为数组元素的基类型构成数组。前者在前面的例题中已多次见到;后者是本节要讨论的内容。结构数组是一个数组,其数组中的每一个基本元素都是结构类型。说明结构数组的方法是:先定义一个结构,然后用结构类型说明一个数组变量。例如:为记录 100 个人的基本情况。可以说明一个有 100 个元素的数组。每个元素的基类型为一个结构,在说明数组时可以写成: struct person man[100]; man 就是有 100 个元素的结构数组,数组的每个元素为 person 型结构。要访问结构数组中的具体结构,必须遵守数组使用的规定,按数组名及其下标进行访问, 要访问结构数组中某个具体结构下的成员,又要遵守有关访问结构成员的规定,使用"." 访问运算符和成员名。访问结构数组成员的一般格式是: 结构数组名[下标].成员名同一般的数组一样,结构数组中每个元素的起始下标从 0开始,数组名称表示该结构数组的存储首地址。结构数组存放在一连续的内存区域中,它所占内存数目为结构类型的大小乘以数组元素的个数。结构数组 man 在内存中的存储如图 11-3 所示: 例如,我们要将数组 man 中的 3号元素赋值为: "Fangjin",'M',1963,9,13 ,就可以使用下列语句: strcpy(man[3].name, "Fangjin"); man[3].sex='M'; man[3].=1963; man[3].=9; man[3].=13; /*为结构数组
第十一章结构类型及其它构造类型 来自淘豆网m.daumloan.com转载请标明出处.