欢迎来到天天文库
浏览记录
ID:50083162
大小:1023.50 KB
页数:85页
时间:2020-03-08
《C程序设计 教学课件 作者 王丽娟 第7-12章第9章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章系统安全性9.1结构体9.2结构体型数组9.3结构体型指针9.4内存的动态分配9.5共用体9.6位段9.7用typedef定义类型9.1结构体9.1.1结构体类型数组将若干具有共同类型特征的数据组合在了一起。然而,在实际处理中,待处理的信息往往是由多种类型组成的,如有关学生的数据,不仅有学习成绩,还应包括诸如学号(长整型)、姓名(字符串类型)、性别(字符型)、出生日期(字符串型)等。再如编写工人管理程序时,所处理对象——工人的信息类似于学生,只是将学习成绩换成工资。就目前所学知识,我们只能将各个项定义成互相独立的简单变量或数组,无法反映它们之间的内在联系。应该有一种新的
2、类型,就像数组将多个同类型数据组合在一起一样,能将这些具有内在联系的不同类型的数据组合在一起,C语言提供了“结构体”类型来完成这一任务。9.1.2结构体类型的定义结构体类型的定义形式如下:struct结构体类型名{成员列表};例如:structstudent{longintnum;charname[20];charsex;intage;};说明:(1)关键字struct和结构体类型名student组合成一种类型标识符,其地位如同通常的int,char等,其用途是用来定义该结构体型变量,定义了变量之后,该变量就可以像其它变量一样的使用了,类型名便不应再在程序中出现(
3、求长度运算除外,一般程序只对变量操作)。类型名的起名规则遵从标识符。(2)成员列表为本结构体类型所包含的若干个成员的列表,必需用{}括起来,并以分号结束。每个成员的形式为类型标识符成员名;如例中的longintnum;charname[20];等成员(如num)又可称为成员变量,也是一种标识符,成员的类型可以是除该结构体类型自身外,C语言允许的任何数据类型,结构体类型structstudent中学号num是长整型姓名name是字符数组、性别sex是字符型等等。成员之一还可以是其它结构体类型,此时称为结构体类型嵌套,如用生日代替上例中的年龄。可以定义结构体类型如下:struc
4、tdate{intyear;intmonth;intday;};structstudent1{longintnum;charname[20];charsex;structdatebirthday;structstudentl*ps;};9.1.3结构体型变量的定义形式一,类型、变量分别定义:structstaff{charname[20];/*姓名*/chardepartment[20];/*部门*/intsalary;/*工资*/intcost;/*扣款*/intrealsum;/*实发工资*/};structstaffworker1,work
5、er2;形式二,类型、变量一起定义:structstaff{charname[20];chardepartment[20];intsalary;intcost;intrealsum;}worker1,worker2;形式三是形式二的简化,省略类型名:struct{charname[20];chardepartment[20];intsalary;intcost;intrealsum;}worker1,worker2;图9.1结构体型变量在内存中的存贮形式9.1.4结构体型变量及其成员的引用(1)变量成员的引用方法(成员运算符“.”):如前例结构体类型stru
6、ctstaff下定义的两个变量worker1,worker2,二变量中的每个成员均可引用,且所引用的成员变量与其所属类型的普通变量一样可进行该类型所允许的任何运算。例如:worker1.realsum=worker1.salary-worker1.cost;worker2.salary=worker1.salary;scanf(″%s″,worker1.name);scanf(″%d″,&worker1.cost);又如:structstudentstu1,stu2;之后,变量stu1,stu2成员的引用可以是:stu2.num=stu1.num+1;stu1.age+
7、+;scanf(″%ld″,&stu1.num);在C语言的运算符中,取成员运算符“.”优先级最高,故以上语句均为对引用之后的成员变量进行操作。若结构体定义是嵌套的,则只能引用最低级的成员(用若干“.”运算符,逐级引用到最低级)。例如:在上一节定义了类型student1之后,若有structstudent1stu3;结构体型变量stu3的成员引用为:stu3.birthday.yearstu3.birthday.month不可对stu3.birthday进
此文档下载收益归作者所有