C语言程序设计 第9章结构体与共用体 八>此索料技太学计算机系
1
第9章结构体与共用体 2 9.1结构体 9.2共用体 9.3枚举类型与类型命名 2021-2-24
2021-2-24 2
91结构体 3 91.1结构体与结构体类型的定义 信息管理 个学生的信息有学号、姓名、性别、年龄、住 址、成绩等。 本图书的信息有分类编号、书名、作者、出版 社、出版日期、价格、库存量等。 如何描述这些类型不同的相关数据? 结构体—一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。 2021-2-24
2021-2-24 3 一个学生的信息有学号、姓名、性别、年龄、住 址、成绩等。 一本图书的信息有分类编号、书名、作者、出版 社、出版日期、价格、库存量等。 如何描述这些类型不同的相关数据? ——一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员
91结构体 4 91.1结构体与结构体类型的定义 结构体类型定义的一般形式: struct结构体名 ● struct为关键字 数据类型1成员名1;·结构体名是用户定义 数据类型2成员名2; 的类型标识。 }中是组成该结构体 数据类型n成员名n; 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型。 2021-2-24
2021-2-24 4 数据类型1 成员名1; 数据类型2 成员名2; …… 数据类型n 成员名n; ; l struct为关键字; l 结构体名是用户定义 的类型标识。 l { }中是组成该结构体 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型
91结构体 5 91.1结构体与结构体类型的定义 例如学生类型的定义: struct student char num8;/学号是字符数组类型* char namel30];/姓名是字符数组类型 char sex /性别是字符型* int age; /年龄是整型 char addr|60;/住址是字符数组类型* int score|6;/成绩是整型数组类型* 2021-2-24
2021-2-24 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]; /* 成绩是整型数组类型 */ };
91结构体 912结构体变量的定义与初始化 1.结构体类型变量的定义 struct student ●利用已定义的结构体类型名定mum8个字节 srct结构体名变量名表;mame30个字节 例如: seX 1个字节 age 2个字节 struct bookcard book1[ 100; addr 60个字节 struct student s30, tl, t2 score12个字节 按照结构体类型的组成,系统为定义的结构体 变量分配内存单元。结构体变量的各个成员在内存 中占用连续存储区域,结构体变量所占内存大小为 结构体中每个成员所占用内存的长度之和。 2021-2-24
2021-2-24 6 按照结构体类型的组成,系统为定义的结构体 变量分配内存单元。结构体变量的各个成员在内存 中占用连续存储区域,结构体变量所占内存 结构体中每个成员所占用内存的长度之和
91结构体 结构体类型与变量的说明 struct date f int year, month, day; ); num 8个字节 struct student name 30个字节 i char num 8; 1个字节 char name 30: year2个字节 char sex: struct date birthday birthday month2个字节 char addr 60l day|2个字节 int score]; addr 60个字节 score 12个字节 对象 2021-2-24
2021-2-24 7 Ø 应先定义一个 ,而后再定义 。 Ø 系统对 不分配空间,仅对 分配空间。 Ø 只能对 赋值、存取或运算,而不能对一个 赋值、存取或运算。 不 同结构体类型的成员名相同, struct date { int year,month,day;}; struct student { char num[8]; char name[30]; char sex; birthday; /* 成员为结构体类型 */ char addr[60]; int score[6]; };
91结构体 8 912结构体变量的定义与初始化 1.结构体类型变量的定义 ●在定义结构体类型的同时定义变量 struct结构体名 成员定义表; }变量名表; 例如 struct student i char num 8, name 20l, sex; int age; float score }st|30]; 2021-2-24
2021-2-24 8 例如:
91结构体 912结构体变量的定义与初始化 1.结构体类型变量的定义 ●直接定义结构体类型变量 struct 成员定义表; }变量名表; 例如 struct &char num 8 name 20, sex; Int age; float score, }st|30|,a,b,C; 2021-2-24
2021-2-24 9 例如:
91结构体 10 912结构体变量的定义与初始化 2.结构体变量的初始化 【例94】结构体变量的初始化。 struct date 如果初值个数少于结构体成员个数, int year,mon则将无初值对应的成员赋以0值。 struct student 如果初值个数多于结构体成员个数 i char num 81. 则编译出错。 struct date birthday float score }a={"9060l"," Li ming",M’,{1977,12,9},83}, b={"9608025"," Zhang liming","F,{1978,5,10},87} 2021-2-24
2021-2-24 10 如果初值个数少于结构体成员个数, 则将无初值对应的成员赋以0值。 如果初值个数多于结构体成员个数, 则编译出错