版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、问题的提出,结构体类型与结构体变量,结构体数组,结构体与函数,共用体,第,8,章,结构体与共用体,8.1,问题的提出,学号,姓名,性别,入学时间,计算机原理,C,语言,编译原理,操作系统,1,令狐冲,男,2006,90,83,72,82,2,林平之,男,2006,78,92,88,78,3,岳灵珊,女,2006,89,72,98,66,4,任莹莹,女,2006,78,95,87,90,5,6,如果只存储某班的某门课程的成绩,可使用一维数,组;只存储若干门课程的成绩,可用二维数组;对于,下表该如何组织数据,采用什么存储结构?,int,studentId30 = 1,2,3,4,5,6;,char
2、,瑳摵湥乴浡孥?孝?筻,令狐冲,林平之,屻,岳灵珊,任莹莹,;,char,瑳摵湥却硥?孝?筻,男,男,女,女,;,int,timeOfEnter30 = 2006,2006,2006,2006;,int,scoreComputer30 = 90,78,89,78;,int,scoreEnglish30 = 83,92,72,95;,int,scoreMath30 = 72,88,98,87;,int,scoreMusic30 = 82,78,66,90;,采用分散的一维数组结构,?,数据的内存管理方式,90,78,89,78,83,92,72,95,72,88,98,87,82,78,66,9
3、0,1,2,3,4,令狐冲,林平之,岳灵珊,任莹莹,男,男,女,女,2006,2006,2006,2006,2000,4000,4E00,F010,10F0,EE00,CE00,6600,存储学生信息的设想,建立一个长度为,30,的数组,其中的每一个数,组元素就是一个学生的学生考试信息,每一个,数组元素的理想存储结构可为:,学号,姓,名,性别,入学,原理,C,编译,OS,一个完整的变量,StudentId,StudentName,StudentSesx,TimeOfEnter,Score_1,Score_2,Score_3,Score_4,8.2,结构体类型与结构体变量,格式,struct,标
4、识符,类型,1,域名,1,;,类型,2,域名,2,;,类型,n,域名,n,;,;,其中:标识符是定义的结构体类型名;,结构体名,成员、域,一、结构体的声明,举例,定义学生档案的结构体,struct,personnel,int,num,;,char,name10,;,char,sex,;,int,age,;,float,score,;,char,addr30,;,;,变量说明,struct personnel,person,;,二、定义结构体的变量,struct,类型,变量名,,,;,1,、先声明类型后定义变量,struct,personnel,int,num;,char,name10;,cha
5、r,sex;,int,age;,float,score;,char,addr30;,;,struct personnel,stu1, stu2,;,2,、在声明同时定义变量,struct,personnel,int,num;,char,name10;,char,sex;,int,age;,float,score;,char,addr30;,student1, student2,;,struct,personnel,int,num;,char,name10;,char,sex;,int,age;,float,score;,char,addr30;,;,struct personnel,stude
6、nt1,student2;,等价,3,、直接定义结构类型变量,struct,int,num;,char name10;,char sex;,int,age;,float score;,char addr30;,student1, student2,;,如:,struct date, int month,;,int day;,int year;,;,struct student, int,num;,char,name10;,struct,date,birthday,;,stu1;,4,、成员也可以是一个结构体变量,num,name,birthday,month,day,year,5,、定义指向结
7、构体的指针变量,格式,struct,结构类型名,*,指针名;,举例,struct student,*p, stu1,;,p=,指针,p,即指向结构体变量,stu1,的首地址。,三、结构体变量的引用,格式,结构体变量名,.,域名,举例,输出学生档案数据,printf(%d,person,.,num,);,printf(%s,person,.,name,);,printf(%c,person,.,sex,);,printf(%d,person,.,age,);,printf(%f,person,.,score,);,printf(%s,person,.,addr,);,1,、圆点运算符,2,、箭头
8、运算符,域表示,结构指针名,域名,举例,p,num,等价于,(*p),.,num,struct personnel *p, stu1;,p=,结构体变量引用说明,不能将一个结构体变量作为一个,整体,进行输入和输出。下面是错误的:,printf(%d,%s,%c,%d,%f,%sn,student1);,而应按成员输入和输出。,printf(“%d,n”,student1.num);,printf(“%s,n”,);,如果成员本身又属一个结构体类型,,则要用若干个成员运算符,一级一级地,找到最低一级的成员。只能对最低一级,的成员进行赋值、存取和运算。,struct da
9、te,struct student,int month; int num;,int day; char name10,int year;,struct date birthday;,; student1,student2;,例如:,student1.num,student1.birthday.month,对结构体变量的成员可以像普通,变量一样进行各种运算。,可以引用结构体变量成员的地址,,也可以引用结构体变量的地址。,例如:,scanf(%x, ,printf(%x, ,思考题,?,struct,point,int,x;,int,y;,;,struct,rect,struct,point pt
10、1;,struct,point pt2;,;,?,struct,rect rt, *rp=,?,下面表达式哪些合法?,rt.pt1.x,(*rp).pt1.x,rp-pt1.x,rt-pt1.x,?,上面合法的表达式都是等价的吗?,5,、结构体变量的初始化,struct,personnel,long int num;,char,name10;,char,sex;,int,age;,char,addr30;,stu,=,89031, li san , m, 18, 123 beijing road ,;,8.3,结构体数组,struct personnel,int,num;,char name1
11、0;,char sex;,int,age;,float score;,char addr30;,;,1,、声明结构体,2,、定义结构体数组,格式,struct,personnel,int num;,char name10;,char sex;,int age;,float score;,char addr30;,;,struct personnel,stu3;,3,、初始化结构体数组,struct personnel,stu3,=,10101,Li lin,m,18,87.5,C Beijing road,10102,Zhang li,f,19,99,X Shanghai road,10103
12、,Wang bin,m,20,78.5, zhongshan road,;,num,name,sex,age,score,addr,10101,Li lin,m,18,87.5,103 beijing road,10102,Zhang li,f,19,99,130 shanghai road,10104,Wang bin,m,20,78.5,26 zhongshan road,stu0,stu1,stu2,4,、结构体数组和指针,struct personnel,stu,30,*p,;,p,=stu;,*p,?,stu0,*(p+1),?,stu1,*(p+2),?,stu2,*(p+3),?
13、,stu3,stu1.,num,?,(*(p+1).,num,?,(p+1),-,num,5,、结构体类型应用举例:,(1),已知:,struct,sk,int a;,float b;,data, *p;,若有,p = ,则正确的引用,data,中成员,a,的方是:,A.,(*p).data.a B. (*p).a,C. p-data.a D. p.data.a,B,(2),读程序,写出运行结果。,main(), struct,int x;,int y;,4,*p=s;,printf(“%d,%d,n”,+p,-x,(+p)-x);,4,3,8.4,结构体与函数,把结构体传递给函数的方式有三种
14、:,1.,用结构体的单个成员作参数,在一般情况下,用单个成员作为,实参,给函,数传递参数与普通的值传递没有分别,可看成,普通的实参,是单向值传递,在函数内部对参,数进行操作不影响结构体的变化。,main(), struct number,int num1;,int num2;,num;,num.num1=5;,num.num2=4;,f(num.num1, num.num2);,.,.,.,void f(int m,int n),for(i=1;i=m;i+),for(j=1;j=n;j+),printf(“*”);,2,、用结构体整体作为实参,要求,实参和形参的数据类型相同,(,单向值传递,
15、),举例,struct date,int year;,int month;,int day;,;,void func(struct date p),p.year = 2000;,p.month = 5;,p.day = 22;,main(),struct date d;,d.year = 1999;,d.month = 4;,d.day = 23;,printf(“%d,%d,%d,n”,d.year, d.month, d.day);,func(d);,printf(“%d,%d,%d,n”,d.year, d.month, d.day);,3,、用指向结构体的指针作为实参,要求,实参和形参
16、指向相同的数据类型。,举例,struct date,int year;,int month;,int day;,;,void func(struct date *p),(*p).year = 2000;,(*p).month = 5;,(*p).day = 22;,main(),struct date date1,*d=,d-year = 1999;,d-month = 4;,d-day = 23;,printf(%d,%d,%dn,(*d).year, (*d).month, (*d).day);,func(d);,printf(%d,%d,%dn,d-year, d-month, d-da
17、y);,4,、,Typedef,的使用,给已定义的数据类型定义别名。,功,能,举,例,typedef,int integer,;,typedef,struct student,stu,;,说明,struct student,stu1, stu2;,等价于,stu,stu1,stu2;,使用别名时,可不使用,struct,。,8.5,共用体,联合体,什么是共用体?,是,C,语言提供的一种存储共享的设施。,即将若干个名称不同、类型不同的数据,共,享同一存储单元,。也就是使用覆盖技术,,几个长度不同的变量相互覆盖。,一、共用体类型的定义,格式,union,共用体名,类型,1,成员,1,;,类型,2,
18、成员,2,;,类型,n,成员,n,;,变量序列,;,举例,union,data,int,i,;,char,ch,;,float,f,; ;,变量序列是,可选项。,union,data,int,i,;,char,ch,;,float,f,; ,a,;,说明,共用体所占存储单元长度是成员的最大者。,二、共用体与结构体的区别,结构体的每一个成员都占用自己的,存储空间。,共用体的每个成员共享同一个存储,单元。,结构体所占存储空间的大小是所有,成员所占空间大小的总和。,共用体所占存储单元的大小是所有,成员中占用空间最大的。,三、共用体类型数据的访问,格式,变量名,.,成员名,举例,a.i,引用共用体变量,a,中的整形变量,i,a.ch,引用共用体变量,a,中的字符变量,ch,a.f,引用共用体变量,a,中的实型变量,f,说明,不能只引用共用体变量,例如:,printf(%d, a);,而应是:,printf(%d, a.i); ,printf(%c, a.ch); ,printf(%f, a.f); ,四、共用体类型数据的特点,1.,不能把共用体变量作为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年食品经济学硕士备考题库及答案解析
- 2025年人力资源管理师《员工关系管理》备考题库及答案解析
- 商铺租赁燃气使用费用协议2025
- 商铺租赁广告合作合同协议
- 赡养费协议合同协议2025
- 律师2025年法律咨询合同协议
- 跨境电商平台供货协议2025年修订版
- 地坪工厂转让合同范本
- 回收钢厂固废合同范本
- 回收书本通货合同范本
- 跟腱断裂康复讲课件
- 造口灌肠护理
- JG/T 335-2011混凝土结构防护用成膜型涂料
- 亚马逊店铺授权协议书
- 医学会议筹备工作实施方案
- 2025光伏直流电缆技术规范
- 大学生生涯发展报告
- 2025年金相检验员专业知识考试题库及答案(含各题型)
- 行业标准立项答辩
- Fisher - valvelink阀门诊断软件
- JJF(纺织) 020-2024 织物厚度仪校准规范
评论
0/150
提交评论