第11章 结构体和共用体
第11章结构体和共用体 本章内容 概述 2.定义结构体类型变量的方法 3.结构体变量的引用 4.结构体变量的引用和初始化 5.结构体数组 6.指向结构体类型数据的指钍 7.用指针处理链表 8.共用体 9.枚举类型 10.用 typedef定义类型
-2- 第11章 结构体和共用体 本 章 内 容 1. 概述 2. 定义结构体类型变量的方法 3. 结构体变量的引用 4. 结构体变量的引用和初始化 5. 结构体数组 6. 指向结构体类型数据的指针 7. 用指针处理链表 8. 共用体 9. 枚举类型 10.用typedef定义类型
第11章结构体和共用体 11.1概述 定义 令个组合项中包含若干个类型不同(或相同)的数据项,这样的数据 例如: num name sex age addr struct student int num char name [20] char sex int age char addr [30] 声明结构体类型的一般形式 struct结构体名 [成员表列 成员表列”称为"域表"。 冷每个成员称为结构体中的一个域,对各成员(域)的定义形式如下: 类型名成员名;
-3- 第11章 结构体和共用体 11.1 概述 定义 v 一个组合项中包含若干个类型不同(或相同)的数据项,这样的数据 结构称为结构体。 例如: num name sex age addr struct student { int num; char name[20]; char sex; int age; char addr[30]; }; 声明结构体类型的一般形式 struct 结构体名 {成员表列}; v "成员表列"称为"域表" 。 v 每个成员称为结构体中的一个域,对各成员(域)的定义形式如下: 类型名 成员名;
第11章结构体和共用体 11.2定义结构体类型变量的方法 三种方法: ◆先声明结构体类型,再定义变量名。 ◆在定义类型的同时定义变量。 ☆直接定义结构类型变量。 ◆方法一:假设有如下定义: struct student int num: char name [20] char sex: int age; float score; char addr [30] struct student stud1, stud2;
-4- 第11章 结构体和共用体 11.2 定义结构体类型变量的方法 三种方法: v 先声明结构体类型,再定义变量名。 v 在定义类型的同时定义变量。 v 直接定义结构类型变量。 v 方法一:假设有如下定义: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stud1, stud2;
第11章结构体和共用体 11.2定义结构体类型变量的方法 ◆方法二 struct结构体名 成员表列 }变量名表列; ◆方法三 struct 成员表列 }变量名表列; 对结构体类型的几点说明 类型与变量是不同的概念。在编译时,对类型是不分配空间的, 只对变量分配空间。 令结构体中的成员可以单独引用。 ◆成员也可以是一个结构体变量。(P283) 令成员名可以与程序中的变量名相同
-5- 第11章 结构体和共用体 11.2 定义结构体类型变量的方法 v 方法二: struct 结构体名 { 成员表列 }变量名表列; v 方法三: struct { 成员表列 } 变量名表列; 对结构体类型的几点说明 v 类型与变量是不同的概念。在编译时,对类型是不分配空间的, 只对变量分配空间。 v 结构体中的成员可以单独引用。 v 成员也可以是一个结构体变量。(P283) v 成员名可以与程序中的变量名相同
第11章结构体和共用体 11.3结构体变量的引用 四项原则 ☆不能整体输入输出,只能对各个成员分别引用。 结构体变量名.成员名(成员运算符”.") ◆如果成员本身又属于一个结构体类型,则用多个成员运算符, 级一级地找到最低一级的成员,只能对最低一级的成员进行赋值、 存取及运算。 例如: struct date struct student int month char name [20] int day: char sex. int year int age; struct date birthday stul, stu2. stul birthday. month 1
-6- 第11章 结构体和共用体 11.3 结构体变量的引用 四项原则 v 不能整体输入输出,只能对各个成员分别引用。 结构体变量名.成员名 (成员运算符".") v 如果成员本身又属于一个结构体类型,则用多个成员运算符,一 级一级地找到最低一级的成员,只能对最低一级的成员进行赋值、 存取及运算。 例如: struct date { int month; int day; int year; }; struct student { char name[20]; char sex; int age; struct date birthday; }; stu1, stu2; stu1.birthday.month = 1;
第11章结构体和共用体 11.3结构体变量的引用 ◆对成员变量可以像普通变量一样进行各种运算。 例如: stul, num + 可以引用成员的地址,也可以应用结构体变量的地址。 例如: scanf("%d",&stul num) pr intf("‰o",&stu1); 但不能用以下语句整体读入结构体变量, 例如: scanf(“%s,‰c,%d,”,&stu1);//错误
-7- 第11章 结构体和共用体 11.3 结构体变量的引用 v 对成员变量可以像普通变量一样进行各种运算。 例如: stu1.num ++; v 可以引用成员的地址,也可以应用结构体变量的地址。 例如: scanf("%d", &stu1.num); printf("%o ", &stu1); 但不能用以下语句整体读入结构体变量, 例如: scanf(“%s, %c, %d, ”, &stu1); //错误
第11章结构体和共用体 11.4结构体变量的初始化 结构体变量和其它类型变量一样,可以在定义时指定初始值。 例11.1:对结构体变量的初始化。 i inc ude void main struct student char name [20] char sex Int age; }a={" Li Lin","M',23}; pr intf("name:%s\nsex:‰cⅦnage:%Ⅷn",a.name,a.sex,a.gae);
-8- 第11章 结构体和共用体 11.4 结构体变量的初始化 结构体变量和其它类型变量一样,可以在定义时指定初始值。 例11.1:对结构体变量的初始化。 #include void main() { struct student { char name[20]; char sex; int age; } a = {"Li Lin ", 'M', 23}; printf(" name: %s\n sex:%c\n age:%d\n ",a.name, a.sex, a.gae); }
第11章结构体和共用体 11.5结构体数组 定义结构体数组 只要说明该结构体变量为数组类型,则每个数组元素都是一个结构体 类型数据。 例如 struct student char name [20] char sex int age stu[3]*/ struct student stu[3]
-9- 第11章 结构体和共用体 11.5 结构体数组 定义结构体数组 只要说明该结构体变量为数组类型,则每个数组元素都是一个结构体 类型数据。 例如: struct student { char name[20]; char sex; int age; }; /* stu[3] */ struct student stu[3];
第11章结构体和共用体 11.5结构体数组 结构体数组的初始化 ☆一般形式: 在定义数组的后面加上:={初值表列; struct student char name [20] char sex: int age; }stu[3]=[{" Li Lin","M',23}, [Wang nan",F, 21] [" Liu li","F',22} ◆定义数组时,元素个数可以不指定,编译时系统会根据给出初值 的结构体常量的个数来确定数组元素的个数。 10
-10- 第11章 结构体和共用体 11.5 结构体数组 结构体数组的初始化 v 一般形式: 在定义数组的后面加上: ={初值表列}; v 定义数组时,元素个数可以不指定,编译时系统会根据给出初值 的结构体常量的个数来确定数组元素的个数。 struct student { char name[20]; char sex; int age; } stu[3] = {{"Li Lin ", 'M', 23}, {"Wang nan ", 'F', 21}, {"Liu Li", 'F', 22} };