第七章 结构体与共用体
第七章 结构体与共用体
■ 概述 ·定义结构体类型变量的方法 ·结构体变量的引用 ■结构体变量的初始化 结构体数组 ·指向结构体类型数据的指针 ·用指针处理链表 ·结构体变量所占内存计算 ■ 共用体 ■枚举类型 ■用ypedef定义类型
◼ 概述 ◼ 定义结构体类型变量的方法 ◼ 结构体变量的引用 ◼ 结构体变量的初始化 ◼ 结构体数组 ◼ 指向结构体类型数据的指针 ◼ 用指针处理链表 ◼ 结构体变量所占内存计算 ◼ 共用体 ◼ 枚举类型 ◼ 用typedef定义类型
(一)概述
(一)概述
概述 迄今为止,已介绍了基本类型(如整型、实型、字符 型变量等,也介绍了一种构造类型数据 数组, 数组中的各元素是属于同一个类型的。 但是只有这些数据类型是不够的。有时需要将不同 类型的数据组合成一个有机的整体,以便于引用。 这些组合在一个整体中的数据是互相联系的。 例如,一个学生的学号、姓名、性别、年龄、成绩、 家庭地址等项。这些项都与某一学生相联系。如下 图所示。 num name sex age score addr 10010 LiFun M 18 87.5 Beijing
概述 迄今为止,已介绍了基本类型( 如整型、实型、字符 型变量等),也介绍了一种构造类型数据——数组, 数组中的各元素是属于同一个类型的。 但是只有这些数据类型是不够的。有时需要将不同 类型的数据组合成一个有机的整体,以便于引用。 这些组合在一个整体中的数据是互相联系的。 例如,一个学生的学号、姓名、性别、年龄、成绩、 家庭地址等项。这些项都与某一学生相联系。如下 图所示
概述 如果将num、name、sex、age、score、addr分别定义为互相独立的简单变量, 餐容民发者新暖餐霸 项中包含有 定这样二种数据结构,它称为结构体structure)。 如: struct student int num; char name[20]; char sex; int age; float score; char addr 30]; }: 应当说明struct student是一个类型名,它和系统提供的标准类型(如int,char、 oat、double等一样具有同样的地位和作用,都可以用来定义变量的类型,只 不过结构体类型需要由用户自己指定而己
概述 如果将num、name、sex、age、score、addr分别定义为互相独立的简单变量, 难以反映它们之间的内在联系。应当把它们组织成一个组合项,在一个组合 项中包含若干个类型不同(当然也可以相同)的数据项。C语言允许用户自己指 定这样一种数据结构,它称为结构体(structure)。 如: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; 应当说明struct student是一个类型名,它和系统提供的标准类型(如int、char、 float、double等)一样具有同样的地位和作用,都可以用来定义变量的类型,只 不过结构体类型需要由用户自己指定而已
结构类型的声明 声明一个结构体类型的一般形式为 struct结构体名 成员表列 }: “结构体名”用作结构体类型的标志,它又称“结构体 标记”(structure tag)。 大括弧内是该结构体中的各个成员,由它们组成一个结 构体。对各成员都应进行类型声明,即 类型名成员名 也可以把“成员表列”称为“域表”。每一个成员也称 为结构体中的一个域。成员名定名规与变量名同
结构类型的声明 声明一个结构体类型的一般形式为 struct 结构体名 { 成员表列 }; “结构体名” 用作结构体类型的标志,它又称“结构体 标记”(structure tag) 。 大括弧内是该结构体中的各个成员,由它们组成一个结 构体。对各成员都应进行类型声明,即 类型名 成员名 也可以把“成员表列”称为“域表”。每一个成员也称 为结构体中的一个域。成员名定名规与变量名同
(二)定义结构体类型变量的方法
(二)定义结构体类型变量的方法
前面声明结构体只是指定了一个结构体类型,它 相当于一个模型,但其中并无具体数据,系统对 之也不分配实际内存单元。为了能在程序中使用 结构体类型的数据,应当定义结构体类型的变量, 并在其中存放具体的数据。可以采取以下三种方 法定义结构体类型变量
前面声明结构体只是指定了一个结构体类型,它 相当于一个模型,但其中并无具体数据,系统对 之也不分配实际内存单元。为了能在程序中使用 结构体类型的数据,应当定义结构体类型的变量, 并在其中存放具体的数据。可以采取以下三种方 法定义结构体类型变量
方法一:先声明结构体类型再定义变量名 如上面已定义了一个结构体类型struct student, 可以用它来定义变量;如: struct student student1; struct student student2; 定义了student1和student2为struct student?类型的变 量,即它们具有struct student类型的结构。如下 图所示: student1:10001 Zhang Xin M 19 90.5 hanghai student2:10002 Wang Li F20 98 Beijing
方法一:先声明结构体类型再定义变量名 如上面已定义了一个结构体类型struct student, 可以用它来定义变量;如: struct student student1; struct student student2; 定义了student1和student2为struct student类型的变 量,即它们具有struct student类型的结构。如下 图所示:
方法一:先声明结构体类型再定义变量名 注意: 如果程序规模比较大,往往将对结构体类型的声 明集中放到一个文件(以.h为后缀的“头文件”) 中。哪个源文件需用到此结构体类型则可用 #include命令将该头文件包含到本文件中。这样 做便于结构体的维护和使用
方法一:先声明结构体类型再定义变量名 注意: 如果程序规模比较大,往往将对结构体类型的声 明集中放到一个文件(以.h为后缀的“头文件”) 中。哪个源文件需用到此结构体类型则可用 #include命令将该头文件包含到本文件中。这样 做便于结构体的维护和使用