1、第 11 章 结构体与共同体11.1 概述1.结构体是一种构造数据类型。用途:把若干相互关联的、不同类型的数据组合成一个整体。自定义数据类型。2.结构体类型声明struct 结构体名类型 成员名;类型 成员名;.;11.2 定义结构体类型变量的方法1.先声明结构体类型,再定义结构体变量。定义形式:struct 结构体名类型 成员名;类型 成员名; ;struct 结构体名 变量名表列;2.在声明结构体类型的同时定义结构体变量。定义形式:struct 结构体名类型 成员名;类型 成员名; 变量名表列;3.直接定义结构体变量。注意:无名结构体直接定义变量只能一次。关于结构体类型和结构体变量的说明类
2、型与变量概念不同。只能对变量赋值、存取或运算;不能对类型赋值、存取或运算。编译时,对类型不分配空间,只对变量分配空间。结构体成员可以与程序中的变量同名。结构体成员也可以是一个结构体变量(嵌套) 。11.3 结构体变量的引用1.规则:不能整体引用结构体变量,只能引用变量成员。2.引用形式 :结构体变量名.成员名;11.4 结构体变量的初始化1.编译时,按各成员在结构体中的先后顺序为结构体变量分配连续内存空间。初始化方式类似数组。11.5 结构体数组1.11.6 指向结构体类型数据的指针1.可以定义一个指针变量用来指向某个结构体变量,此时该指针变量的值是此结构体变量所占的内存段的起始地址。定义形式
3、:struct 结构体名 *结构体指针变量名;指针访问结构体成员的方法:1. 结构体指针变量名-成员名2. (*结构体指针变量名 ). 成员名结构体指针变量也可用来指向结构体数组。11.7 用指针处理链表1.链表概述链表是一种重要的数据结构,由一个头指针变量和一系列结点构成。每个结点都包括两部分:实际数据和下一结点的地址。结构体变量因其自身的特点最适合作为链表的结点。一个指针类型的结构体成员也可以指向自己所在的结构体类型的数据。11.8 共同体1.共用体是一种构造数据类型。若干不同类型的变量组合成一个整体,共占一段内存(相互覆盖) 单元。自定义数据类型。2.共用体类型声明union 共用体名类
4、型 成员名;类型 成员名;.;共用体类型声明仅描述结构的组织形式,不分配内存。3.共用体变量引用共用体变量引用与结构体类似,有下面三种方式:共用体变量名.成员名;共用体指针名-成员名;(*共用体指针名).成员名;注意:不能引用共用体变量,只能引用其成员。共用体变量中起作用的成员是最后一次存放 的成员。应注意共用体变量的当前值。不能在定义共用体变量时初始化。共用体可嵌套于结构体中。11.9 枚举1.枚举是一种构造数据类型。用途:将变量的值一一列举出来,变量的值只限于元素表所列举出来的取值范围内。枚举的声明形式:enum 枚举名 枚举元素表 ;枚举变量的定义形式:enum 枚举名 变量表;enum
5、 枚举名 枚举元素表 变量表;注意:在 C 编译中,对枚举元素按常量处理,故称枚举常量。不能对他们赋值。枚举元素默认值按定义时的顺序依次为 0, 1, 2,也可以在定义时改变枚举元素的值。不能给一个枚举变量赋一个整数值。枚举值可以用来做判断比较。11.10 用 typedef 定义类型1.用途:简化结构体、共用体等构造类型的类型说明。类型定义的一般形式:typedef 原类型名 新类型名;例:typedef struct student int num ;char name20;char sex;int age; STU ; STU stu1,stu2;typedef char * CP ;CP point1;