第8章结构体、共用体和枚举类型 8.1结构体类型 8.,2结构体指钍 83共用体 84枚举类型
第8章 结构体、共用体和枚举类型 8.1 结构体类型 8.2 结构体指针 8.3 共用体 8.4 枚举类型
8.1.1结构体类型的定义 结构体是一种构造类型(自定义类型),除了 结构体变量需要定义后才能使用外,结构体的类型 本身也需要定义。结构体由若干“成员”组成。每 个成员可以是一个基本的数据类型,也可以是一个 经定义的构造类型。 结构体类型定义的一般形式为: stuc结构类型名 类型1成员1; 类型2成员2; 类型n成员n;
8.1.1 结构体类型的定义 结构体是一种构造类型(自定义类型),除了 结构体变量需要定义后才能使用外,结构体的类型 本身也需要定义。结构体由若干“成员”组成。每 个成员可以是一个基本的数据类型,也可以是一个 已经定义的构造类型。 结构体类型定义的一般形式为: struct 结构类型名 { 类型1 成员1; 类型2 成员2; ...... 类型n 成员n; };
说明: struct score是结构体类型名, struct是关 键词,在定义和使用时均不能省略。 该结构体类型由6个成员组成,分别属于 不同的数据类型,分号“;”不能省略; 成员含义同前 在定义了结构体类型后,就可以进一步 定义该结构体类型的变量,并在程序中使 用它们了
说明: • struct score是结构体类型名,struct是关 键词,在定义和使用时均不能省略。 • 该结构体类型由6个成员组成,分别属于 不同的数据类型,分号“;”不能省略; 成员含义同前。 • 在定义了结构体类型后,就可以进一步 定义该结构体类型的变量,并在程序中使 用它们了
812结构体变量的定义与引用 1.结构体变量的定义 结构是一个新的数据类型,但它本身并不 是变量,它不占用任何空间,也不能像变量那 样出现在表达式中。因此,要想使用某种结构 类型,就需要定义该结构类型的变量。结构变 量也可以像其它类型的变量一样赋值、运算 不同的是结构变量以成员作为基本变量
8.1.2 结构体变量的定义与引用 1.结构体变量的定义 结构是一个新的数据类型,但它本身并不 是变量,它不占用任何空间,也不能像变量那 样出现在表达式中。因此,要想使用某种结构 类型,就需要定义该结构类型的变量。结构变 量也可以像其它类型的变量一样赋值、运算, 不同的是结构变量以成员作为基本变量
下面以前面定义的 Score结构类型为例来加以 说明。 先定义结构类型,再定乂结构变量。如: struct score int no char name 20 int english Int computer int clang struct score stul stu2 定义了两个变量stu和stu2为 score结构类型
下面以前面定义的score结构类型为例来加以 说明。 1、先定义结构类型,再定义结构变量。如: struct score { int no; char name[20]; int english; int computer; int clang; }; struct score stu1,stu2; 定义了两个变量stu1和stu2为score结构类型
2.结构体变量的引用 (1)结构成员的表示方式 ·结构变量被定义后,就可以在程序中使用它。 对结构变量的使用是通过对它的成员来实现的。 引用结构成员的一般形式为: 结构变量成员名 如果将“结构变量成员名”看成一个整体,则 这个整体的数据类型与结构中该成员的数据类 型相同,这样就可像前面所讲的变量那样使用 结构变量 下面这个程序定义了一个结构变量,并进行了 使用
• 2.结构体变量的引用 • (1)结构成员的表示方式 • 结构变量被定义后,就可以在程序中使用它。 对结构变量的使用是通过对它的成员来实现的。 • 引用结构成员的一般形式为: • 结构变量.成员名 • 如果将“结构变量.成员名”看成一个整体,则 这个整体的数据类型与结构中该成员的数据类 型相同, 这样就可像前面所讲的变量那样使用 结构变量了。 • 下面这个程序定义了一个结构变量,并进行了 使用
8.1.3结构体数组 结构数组就是具有相同结构类型的变量集合。结构数组 的每一个元素都是具有相同结构类型的下标结构变量。在实 际应用中,终常用结枃数组来表示县有梖回数据结枃的 群体。如 班的学生档案, 职工资 假如要记录一个班级冋学的姓名、性别、年龄和住址, 就可以定义为一个结构数组。如下所示: struct char name char sex[21 Int age char a dr[40]; 3 student301 此处定义了一个结构数组 student,共有30个数组元素, student[0]~ student[29]。每个数组元素都具有 struct student 的结构形式
8.1.3 结构体数组 • 结构数组就是具有相同结构类型的变量集合。结构数组 的每一个元素都是具有相同结构类型的下标结构变量。在实 际应用中,经常用结构数组来表示具有相同数据结构的一个 群体。如一个班的学生档案,一个单位的职工资料等。 • 假如要记录一个班级同学的姓名、性别、年龄和住址, 就可以定义为一个结构数组。如下所示: • struct • { • char name[8]; • char sex[2]; • int age; • char addr[40]; • }student[30]; • 此处定义了一个结构数组student,共有30个数组元素, student [0]~student [29]。每个数组元素都具有struct student 的结构形式
对外部结构数组或静态结构数组可以作初始化赋值,例 如 struct stu Int num char name char sex; float score °}boy[5]= 101, LI ping","M",45}, (102, Zhang ping", M, 62.5, {103," He fang","F",92.5}, (104, Cheng ling", F,87) {105, Wang ming","M"258}; 当对全部元素作初始化赋值时,也可不给出数组长度
• 对外部结构数组或静态结构数组可以作初始化赋值,例 如: • struct stu • { • int num; • char *name; • char sex; • float score; • }boy[5]={ • {101,"Li ping","M",45}, • {102,"Zhang ping","M",62.5}, • {103,"He fang","F",92.5}, • {104,"Cheng ling","F",87}, • {105,"Wang ming","M",58}; • } • 当对全部元素作初始化赋值时,也可不给出数组长度
8.2结构体指针 821指向结构体变量的指针 结构变量被定义以后,系统将在进行编译时为其分配 定的存储空间,故结构变量与普通变量一样有一个存储空 间的起始地址,因此可以定义一个指针变量用来存储结构 变量的起始地址,称为指向结构的指针变量。结构指针变 量中的值是所指向的结构变量存储空间的首地址。通过结 构指针即可访问该结构变量,这与数组指针和函数指针的 况是相同的。 结构指针变量说明的一般形式为: struct结构名*结构指针变量名 例如: struct person char t name Int age Int sex 3 personl ,*p
8.2 结构体指针 8.2.1 指向结构体变量的指针 结构变量被定义以后,系统将在进行编译时为其分配一 定的存储空间,故结构变量与普通变量一样有一个存储空 间的起始地址,因此可以定义一个指针变量用来存储结构 变量的起始地址,称为指向结构的指针变量。结构指针变 量中的值是所指向的结构变量存储空间的首地址。通过结 构指针即可访问该结构变量,这与数组指针和函数指针的 情况是相同的。 结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 例如: struct person { char * name; int age; int sex; } person1, *p;
【例8.8】结构指针变量的使用方法举例。 #include"stdio. h struct stu Bint num char *name char sex float score 3 boy 1=102, " Zhang San",M, 88, *pstu main i pstu=&boy l printf("Number=%d nName=%sn",boy 1. num, boy 1 name) printf("Sex=%cn Score=%fn In", boy 1. sex, boy 1 score printf("Number=%d nName=%osn" pstu). num, (pstu) name); printf("Sex=%cn Score=%fnn" pstu).Sex, (pstu) score) printf("Number=%dInName%osn",pstu->num, pstu->name) printf("Sex=%cn Score=%fnInpstu->sex, pstu->score
• 【例8.8】结构指针变量的使用方法举例。 • #include "stdio.h" • struct stu • {int num; • char *name; • char sex; • float score; • } boy1={102,"Zhang San",'M',88},*pstu; • main() • { pstu=&boy1; • printf("Number=%d\nName=%s\n",boy1.num,boy1.name); • printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score); • printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name); • printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score); • printf("Number=%d\nName=%s\n",pstu->num,pstu->name); • printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score); • }