c语言程序设计第10章.ppt
《c语言程序设计第10章.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计第10章.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第9 9章章 结构体与共用体结构体与共用体池州师专池州师专 计算机中心计算机中心C C 语言程序设计语言程序设计1第第9章章 结构体与共用体结构体与共用体9.1 9.1 9.1 9.1 结构体结构体结构体结构体9.2 9.2 9.2 9.2 共用体共用体共用体共用体9.3 9.3 9.3 9.3 枚举类型与类型命名枚举类型与类型命名枚举类型与类型命名枚举类型与类型命名2023/1/162 一一一一个个个个学学学学生生生生的的的的信信信信息息息息有有有有学学学学号号号号、姓姓姓姓名名名名、性性性性别别别别、年年年年龄龄龄龄、住住住住址址址址、成绩成绩成绩成绩等。等。等。等。一一一一本本本本图图
2、图图书书书书的的的的信信信信息息息息有有有有分分分分类类类类编编编编号号号号、书书书书名名名名、作作作作者者者者、出出出出版版版版社社社社、出版日期出版日期出版日期出版日期、价格价格价格价格、库存量库存量库存量库存量等。等。等。等。如何描述这些类型不同的相关数据?如何描述这些类型不同的相关数据?如何描述这些类型不同的相关数据?如何描述这些类型不同的相关数据?9.1 结构体结构体9.1.1 9.1.1 结构体与结构体类型的定义结构体与结构体类型的定义结构体与结构体类型的定义结构体与结构体类型的定义信息管理信息管理信息管理信息管理结构体结构体结构体结构体一种构造类型数据一种构造类型数据 结构体结构
3、体由若干不同类型的数据项组成,由若干不同类型的数据项组成,构成结构体的各个数据项称为构成结构体的各个数据项称为结构体成员结构体成员。2023/1/163 struct struct 结结结结构体名构体名构体名构体名 数据数据数据数据类类类类型型型型1 1 成成成成员员员员名名名名1;1;数据数据数据数据类类类类型型型型2 2 成成成成员员员员名名名名2;2;数据数据数据数据类类类类型型型型n n 成成成成员员员员名名名名n;n;9.1 结构体结构体9.1.1 9.1.1 结构体与结构体类型的定义结构体与结构体类型的定义结构体与结构体类型的定义结构体与结构体类型的定义结构体类型定义的一般形式:结
4、构体类型定义的一般形式:结构体类型定义的一般形式:结构体类型定义的一般形式:lstructstruct为关键字;为关键字;l结结构构体体名名是是用用户户定定义义的的类型标识类型标识。l 中中是是组组成成该该结结构构体体的的成成员员。成成员员的的数数据据类类型型可可以以是是C语语言言所所允允许的任何数据类型许的任何数据类型。2023/1/164例如图书类型的定义:例如图书类型的定义:例如图书类型的定义:例如图书类型的定义:struct bookcardstruct bookcard char num10;/*char num10;/*图书图书图书图书分类编号是字符数组类型分类编号是字符数组类型分
5、类编号是字符数组类型分类编号是字符数组类型*/*/char name30;/*char name30;/*书名是字符数组类型书名是字符数组类型书名是字符数组类型书名是字符数组类型*/*/char author30;/*char author30;/*作者是字符数组类型作者是字符数组类型作者是字符数组类型作者是字符数组类型*/*/char publisher60;/*char publisher60;/*出版社是字符数组类型出版社是字符数组类型出版社是字符数组类型出版社是字符数组类型*/*/float price;/*float price;/*价格是单精度实型价格是单精度实型价格是单精度实型价
6、格是单精度实型*/*/int n;/*int n;/*库存量是整型库存量是整型库存量是整型库存量是整型*/*/;例如学生类型的定义:例如学生类型的定义:struct student char num8;/*学号是学号是字符数组字符数组类型类型*/char name30;/*姓名是姓名是字符数组字符数组类型类型*/char sex;/*性别是性别是字符型字符型 */int age;/*年龄是年龄是整型整型 */char addr60;/*住址是住址是字符数组字符数组类型类型*/int score6;/*成绩是成绩是整型数组整型数组类型类型*/;9.1 结构体结构体9.1.1 9.1.1 结构体与
7、结构体类型的定义结构体与结构体类型的定义结构体与结构体类型的定义结构体与结构体类型的定义2023/1/1659.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化1.1.结构体类型变量的定义结构体类型变量的定义结构体类型变量的定义结构体类型变量的定义 l l利用已利用已利用已利用已定义的结构体类型名定义变量定义的结构体类型名定义变量定义的结构体类型名定义变量定义的结构体类型名定义变量 struct struct 结构体名结构体名结构体名结构体名 变量名表;变量名表;变量名表;变量名表;例如:例如:例如:例如:
8、struct bookcard struct bookcard book1100;book1100;struct student struct student s30,t1,t2;s30,t1,t2;按按照照结结构构体体类类型型的的组组成成,系系统统为为定定义义的的结结构构体体变变量量分分配配内内存存单单元元。结结构构体体变变量量的的各各个个成成员员在在内内存存中中占占用用连连续续存存储储区区域域,结结构构体体变变量量所所占占内内存存大大大大小小小小为为为为结构体中结构体中每个成员每个成员所占用内存的所占用内存的长度之和长度之和。struct studentstruct studentnumn
9、um8 8个字节个字节个字节个字节namename3030个字节个字节个字节个字节sexsex1 1个字节个字节个字节个字节ageage2 2个字节个字节个字节个字节addraddr6060个字节个字节个字节个字节scorescore1212个字节个字节个字节个字节2023/1/1669.1 结构体结构体结构体类型与变量的说明结构体类型与变量的说明结构体类型与变量的说明结构体类型与变量的说明l l类型类型类型类型与与与与变量变量变量变量是不同的概念。是不同的概念。是不同的概念。是不同的概念。应先定义一个应先定义一个应先定义一个应先定义一个结构体类型结构体类型结构体类型结构体类型,而后再定义,而
10、后再定义,而后再定义,而后再定义结构体变量结构体变量结构体变量结构体变量。系统对系统对系统对系统对类型类型类型类型不分配空间,仅对不分配空间,仅对不分配空间,仅对不分配空间,仅对变量变量变量变量分配空间。分配空间。分配空间。分配空间。只能对只能对只能对只能对变量变量变量变量赋值、存取或运算,而不能对一个赋值、存取或运算,而不能对一个赋值、存取或运算,而不能对一个赋值、存取或运算,而不能对一个类型类型类型类型赋值、存取或运算。赋值、存取或运算。赋值、存取或运算。赋值、存取或运算。l l成员成员成员成员也可以是也可以是也可以是也可以是结构变量结构变量结构变量结构变量。l l对结构中的对结构中的对结
11、构中的对结构中的成员成员成员成员,可以单独使用,它的作用与,可以单独使用,它的作用与,可以单独使用,它的作用与,可以单独使用,它的作用与地位相当于地位相当于地位相当于地位相当于普通变量普通变量普通变量普通变量。l l成员名成员名成员名成员名可与程序中的变量名相同时,也可与可与程序中的变量名相同时,也可与可与程序中的变量名相同时,也可与可与程序中的变量名相同时,也可与不不不不同结构体类型的成员名相同,同结构体类型的成员名相同,同结构体类型的成员名相同,同结构体类型的成员名相同,二者代表不同的二者代表不同的二者代表不同的二者代表不同的对象。对象。对象。对象。struct date int year
12、,month,day;struct student char num8;char name30;char sex;struct datestruct date birthday;/*成员为结构体类型成员为结构体类型*/char addr60;int score6;numnum8 8个字节个字节个字节个字节namename3030个字节个字节个字节个字节sexsex1 1个字节个字节个字节个字节birthdaybirthdayyearyear2 2个字节个字节个字节个字节monthmonth 2 2个字节个字节个字节个字节dayday2 2个字节个字节个字节个字节addraddr6060个字节个
13、字节个字节个字节scorescore1212个字节个字节个字节个字节2023/1/1679.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化1.1.结构体类型变量的定义结构体类型变量的定义结构体类型变量的定义结构体类型变量的定义 l l在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量例如:例如:例如:例如:struct student struct student char num8,name20,sex;char num8,name2
14、0,sex;int age;int age;float score;float score;st30;st30;struct struct 结构体名结构体名结构体名结构体名 成员定义表;成员定义表;成员定义表;成员定义表;变量名表;变量名表;变量名表;变量名表;2023/1/1689.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化1.1.结构体类型变量的定义结构体类型变量的定义结构体类型变量的定义结构体类型变量的定义 l l直接定义结构体类型变量直接定义结构体类型变量直接定义结构体类型变量直接定义结构体类
15、型变量 例如:例如:例如:例如:struct struct char num8,name20,sex;char num8,name20,sex;int age;int age;float score;float score;st30st30,a,b,c,a,b,c;struct struct 成员定义表;成员定义表;成员定义表;成员定义表;变量名表;变量名表;变量名表;变量名表;2023/1/1699.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化2.2.结构体变量的初始化结构体变量的初始化结构体变量的初
16、始化结构体变量的初始化 【例例例例9.49.4】结构体变量的初始化。】结构体变量的初始化。】结构体变量的初始化。】结构体变量的初始化。struct date struct date int year,month,day;int year,month,day;struct student struct student char num8,name20,sex;char num8,name20,sex;struct date birthday;struct date birthday;float score;float score;a=9606011,Li ming,M,1977,12,9,83,
17、a=9606011,Li ming,M,1977,12,9,83,b=9608025,Zhang liming,F,1978,5,10,87,c;b=9608025,Zhang liming,F,1978,5,10,87,c;如果初值个数少于结构体成员个数,如果初值个数少于结构体成员个数,则将无初值对应的成员赋以则将无初值对应的成员赋以0值。值。如果初值个数多于结构体成员个数,如果初值个数多于结构体成员个数,则编译出错。则编译出错。2023/1/16109.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化2
18、.2.结构体变量的初始化结构体变量的初始化结构体变量的初始化结构体变量的初始化 【例【例【例【例9.59.5】结结结结构体数构体数构体数构体数组组组组的初始化。的初始化。的初始化。的初始化。struct s struct s char num8,name20,sex;char num8,name20,sex;float score;float score;stu3=9606011,Li ming,M,87.5,stu3=9606011,Li ming,M,87.5,9606012,Zhang jiangguo,M,79,9606012,Zhang jiangguo,M,79,9606013,W
19、ang ping,F,90;9606013,Wang ping,F,90;元素的个数可以省略,根据赋初值时元素的个数可以省略,根据赋初值时结构体常量的个数确定数组元素的个数结构体常量的个数确定数组元素的个数 2023/1/16119.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化3.3.结构体变量的运算结构体变量的运算结构体变量的运算结构体变量的运算 l l用用用用sizeofsizeof运算符计算结构体变量所占内存空间运算符计算结构体变量所占内存空间运算符计算结构体变量所占内存空间运算符计算结构体变量所
20、占内存空间 struct datestruct date int year,month,day;int year,month,day;struct studentstruct student char num8,name20,sex;char num8,name20,sex;struct date birthday;struct date birthday;float score;float score;a a;sizeof(sizeof(a a)的结果为的结果为的结果为的结果为8+20+1+6+4=398+20+1+6+4=39 sizeof(sizeof(struct studentstr
21、uct student)的结果为的结果为的结果为的结果为3939 2023/1/16129.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化3.3.结构体变量的运算结构体变量的运算结构体变量的运算结构体变量的运算 l l同类型结构体变量之间的同类型结构体变量之间的同类型结构体变量之间的同类型结构体变量之间的赋值运算赋值运算赋值运算赋值运算结构体变量之间进行赋值时,系统将按成员一一对应赋值。结构体变量之间进行赋值时,系统将按成员一一对应赋值。结构体变量之间进行赋值时,系统将按成员一一对应赋值。结构体变量之间进
22、行赋值时,系统将按成员一一对应赋值。struct datestruct date int year,month,day;int year,month,day;struct studentstruct student char num8,name20,sex;char num8,name20,sex;struct date birthday;struct date birthday;float score;float score;a=9606011,Li ming,M,1977,12,9,83,b,c;a=9606011,Li ming,M,1977,12,9,83,b,c;c c=a;a;20
23、23/1/16139.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化3.3.结构体变量的运算结构体变量的运算结构体变量的运算结构体变量的运算 l l对结构体变量进行对结构体变量进行对结构体变量进行对结构体变量进行取址运算取址运算取址运算取址运算 struct datestruct date int year,month,day;int year,month,day;struct studentstruct student char num8,name20,sex;char num8,name20,sex;
24、struct date birthday;struct date birthday;float score;float score;a;a;对对对对结结结结构构构构体体体体变变变变量量量量a a进进进进行行行行&a a 运运运运算算算算,可可可可以以以以得得得得到到到到a a a a的的的的首首首首地址,它是结构体类型指针。地址,它是结构体类型指针。地址,它是结构体类型指针。地址,它是结构体类型指针。2023/1/16149.1 结构体结构体9.1.2 9.1.2 结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化结构体变量的定义与初始化4.4.结构体变量成员的引用结构体
25、变量成员的引用结构体变量成员的引用结构体变量成员的引用 结构体变量成员引用的一般形式:结构体变量成员引用的一般形式:结构体变量成员引用的一般形式:结构体变量成员引用的一般形式:结构体变量名结构体变量名结构体变量名结构体变量名.成员名成员名成员名成员名 结结结结构构构构体体体体变变变变量量量量a a的的的的各各各各成成成成员员员员可可可可分分分分别别别别表表表表示示示示为为为为a a.numnum、a a.namename、a a.sexsex、a a.birthdaybirthday、a a.scorescore struct datestruct date int year,month,da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 10
限制150内