C语言程序设计 第9章结构体与共用体 八此京故太受计算机系
1 第9章 结构体与共用体 北京科技大学 计算机系 C 语言程序设计
第9章结构体与共用体 9.1结构体 9.2共用体 9.3枚举类型与类型命名 2021/2/21
2021/2/21 2 第9章 结构体与共用体 9.1 结构体 9.2 共用体 9.3 枚举类型与类型命名
91结控体 911结构体与结构体类型的定义 信息管逕 个学生的信息有学号、姓名、性别、年龄、住 址、成绩等。 本图书的信息有分类编号、书名、作者、出版社、 出版日期、价格、库存量等。 如何描述这些类型不同的相关数据? 结构体 种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。 2021/2/21
2021/2/21 3 一个学生的信息有学号、姓名、性别、年龄、住 址、成绩等。 一本图书的信息有分类编号、书名、作者、出版社、 出版日期、价格、库存量等。 如何描述这些类型不同的相关数据? 9.1 结构体 9.1.1 结构体与结构体类型的定义 信息管理 结构体——一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员
91结控体 911结构体与结构体类型的定义 结杓体类烈定义的一散形式 struct结构体名 struct为关键字; {数据类型1成员名1 结构体名是用户定义 数据类型2成员名2; 的类型标识。 ●{}中是组成该结构体 数据类型n成员名n; 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型。 2021/2/21
2021/2/21 4 struct 结构体名 { 数据类型1 成员名1; 数据类型2 成员名2; …… 数据类型n 成员名n; }; 9.1 结构体 9.1.1 结构体与结构体类型的定义 结构体类型定义的一般形式: ⚫ struct为关键字; ⚫ 结构体名是用户定义 的类型标识。 ⚫ { }中是组成该结构体 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型
91结控体 911结构体与结构体类型的定义 例如学生类型的定义: struct student { char num8;/学号是字符数组类型 char name30;/姓名是字符数组类型* char sex; /性别是字符型 int age; /年龄是整型 char addr|60;/住址是字符数组类型*/ int scorel6;/成绩是整型数组类型* 2021/2/21
2021/2/21 5 例如图书类型的定义: struct bookcard { char num[10]; /*图书分类编号是字符数组类型*/ char name[30]; /*书名是字符数组类型*/ char author[30]; /*作者是字符数组类型*/ char publisher[60]; /*出版社是字符数组类型*/ float price; /*价格是单精度实型*/ int n; /*库存量是整型*/ }; 例如学生类型的定义: struct student { char num[8]; /* 学号是字符数组类型 */ char name[30]; /* 姓名是字符数组类型 */ char sex; /* 性别是字符型 */ int age; /* 年龄是整型 */ char addr[60]; /* 住址是字符数组类型 */ int score[6]; /* 成绩是整型数组类型 */ }; 9.1 结构体 9.1.1 结构体与结构体类型的定义
91结控体 912结构体变量的定义与初始化 1.结构体类型变量的定义 struct student 利用已定义的结构体类型名定mm 8个字节 struct结构体名变量名表;name30个字节 例如: 1个字节 age 2个字节 struct bookcard book1[100 addr 60个字节 ruct student sI30,t1,t2;scoe12个字节 按照结构体类型的组成,系统为定义的结构体 变量分配內存单元。结构体变量的各个成员在内存 中占用连续存储区域,结构体变量所占内存大小为 结构体中每个成员所占用内存的长度之和。20211
2021/2/21 6 9.1 结构体 9.1.2 结构体变量的定义与初始化 1. 结构体类型变量的定义 ⚫ 利用已定义的结构体类型名定义变量 struct 结构体名 变量名表; 例如: struct bookcard book1[100]; struct student s[30], t1, t2; 按照结构体类型的组成,系统为定义的结构体 变量分配内存单元。结构体变量的各个成员在内存 中占用连续存储区域,结构体变量所占内存大小为 结构体中每个成员所占用内存的长度之和。 struct student num 8个字节 name 30个字节 sex 1个字节 age 2个字节 addr 60个字节 score 12个字节
91结控体 结构体类型与变量的说明 struct date f int year,month, day; 3; num 8个字节 struct student name 30个字节 i char num[8 1个字节 char name 301; year2个字节 char sex: struct date birth d/ birthdaymonth2个字节 char addr 60li day2个字节 int score|6]」 addr 60个字节 score 12个字节 对象。 2021/2/21
2021/2/21 7 9.1 结构体 结构体类型与变量的说明 ⚫ 类型与变量是不同的概念。 ➢ 应先定义一个结构体类型,而后再定义结构体变量。 ➢ 系统对类型不分配空间,仅对变量分配空间。 ➢ 只能对变量赋值、存取或运算,而不能对一个类型 赋值、存取或运算。 ⚫ 成员也可以是结构变量。 ⚫ 对结构中的成员,可以单独使用,它的作用与 地位相当于普通变量。 ⚫ 成员名可与程序中的变量名相同时,也可与不 同结构体类型的成员名相同,二者代表不同的 对象。 struct date { int year,month,day;}; struct student { char num[8]; char name[30]; char sex; struct date birthday; /* 成员为结构体类型 */ char addr[60]; int score[6]; }; num 8个字节 name 30个字节 sex 1个字节 birthday year 2个字节 month 2个字节 day 2个字节 addr 60个字节 score 12个字节
91结控体 8 912结构体变量的定义与初始化 1.结构体类型变量的定义 在定义结构体类型的同时定义变量 struct结构体名 成员定义表; }变量名表; 例如: struct student f char num[8], name 20], sex; Int age; float score }st30]; 2021/2/21
2021/2/21 8 9.1 结构体 9.1.2 结构体变量的定义与初始化 1. 结构体类型变量的定义 ⚫ 在定义结构体类型的同时定义变量 例如: struct student { char num[8],name[20],sex; int age; float score; }st[30]; struct 结构体名 { 成员定义表; }变量名表;
91结控体 912结构体变量的定义与初始化 1.结构体类型变量的定义 ●直接定义结构体类型变量 struct {成员定义表; }变量名表; 例如: struct d char num[], name[20], sex; int agey fle oat score, 3st30], a, b, c; 2021/2/21
2021/2/21 9 9.1 结构体 9.1.2 结构体变量的定义与初始化 1. 结构体类型变量的定义 ⚫ 直接定义结构体类型变量 例如: struct { char num[8],name[20],sex; int age; float score; }st[30], a, b, c; struct { 成员定义表; }变量名表;
91结控体 10 9.12结构体变量的定义与初始化 2.结构体变量的初始化 【例94】结构体变量的初始化。 struct date 如果初值个数少于结构体成员个数 int year,mon则将无初值对应的成员赋以0值。 struct student如果初值个数多于结构体成员个数, i char num 8 则编译出错。 struct date birthday oat score, }a={"96060ll"," Li ming",M,{1977,12,9},83}, b={"9608025", Zhang liming";F",{1978,5,10},87},c 2021/2/21
2021/2/21 10 9.1 结构体 9.1.2 结构体变量的定义与初始化 2. 结构体变量的初始化 【例9.4】结构体变量的初始化。 struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a={"9606011","Li ming",'M',{1977,12,9},83}, b={"9608025","Zhang liming",'F',{1978,5,10},87},c; 如果初值个数少于结构体成员个数, 则将无初值对应的成员赋以0值。 如果初值个数多于结构体成员个数, 则编译出错