结构体与联合体.ppt

上传人:e****s 文档编号:75662406 上传时间:2023-03-04 格式:PPT 页数:34 大小:234KB
返回 下载 相关 举报
结构体与联合体.ppt_第1页
第1页 / 共34页
结构体与联合体.ppt_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《结构体与联合体.ppt》由会员分享,可在线阅读,更多相关《结构体与联合体.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第十章第十章 结构体与联合体结构体与联合体l结构体的定义、声明、初始化l结构体成员的访问l结构体变量的复制与比较l结构体与数组、函数l联合体概述l问题:l一个变量可以表示一种数据类型的数据项。l一个数组可以表示一组相同类型的数据项。l如何表示一组不同类型的数据项呢?l例如:如果我们需要保存以下信息作为一个信息整体:l一个大小为20的字符数组l一个整形数字l一个浮点型数字概述l为满足以上应用需求,提出结构体的概念l结构体是一种机制l能够封装不同类型的数据l用于处理一组逻辑相关的数据项l以一种有意义的方法来组织复杂的数据l联合体是一种特殊的结构体l为节省存储空间而存在l几乎没有什么应用时机结构体的

2、定义l我们可以定义以下格式的结构体struct manchar job20;int old;float height;l该结构体有3个数据字段,称为结构体成员l每个成员可以属于不同的数据类型lman是结构体的名字,称为结构体标记符l定义结构体以后,可以使用标记符来声明属于该结构体的变量结构体的定义l结构体定义的格式如下:struct 结构体标记符数据类型成员变量1;数据类型成员变量2;l注意:l结构体一般以分号结尾l整个结构体是一条语句l每个成员都有自己的名称和数据类型l结构体标记符可以在随后的程序中声明结构体变量声明结构体变量l定义了结构体,就可以声明这种类型的变量l结构体变量的声明格式st

3、ruct 结构体标记符 变量名1,变量名2;l例:struct man LiangYe;l结构体成员本身不是变量,定义结构体时不会它们分配存储空间l当声明结构体变量时,将为结构体变量分配存储空间。声明结构体变量l可以将结构体的定义与变量的声明结合在一起,例如:struct manchar job20;int old;float height;LiangYe;l此时,结构体的名字可以省略,例如:structchar job20;int old;float height;LiangYe;访问结构体成员lLiangYe是一个结构体变量,它有多个成员,如何引用,如何赋值呢?l在结构体中,变量与成员之间

4、的关系使用成员运算符.来建立。l如:LiangYe.oldLiangYe.heightl对变量的成员赋值,可以使用LiangYe.old=29;LiangYe.height=1.80;访问结构体成员l例:定义一个结构体,保存从键盘输入每个人的信息姓名、参加工作时间、工资,保存在结构体中,然后输出。lstruct personalllchar name20;lint day;lint month;lint year;lfloat salary;llmain()访问结构体成员struct personal person;scanf(“%s%d%d%d%f,person.name,&person.d

5、ay,&person.month,&person.year,&person.salary);printf(“%s%d%d%d%fn,person.name,person.day,person.month,person.year,person.salary);结构体的初始化l结构体变量可以在编译时初始化l例:main()structint weight;float height;student=75,1.80;l成员与初始化值必须一一对应l不允许在声明时初始化结构体的初始化l初始化多个结构体变量l例:main()struct manint weight;float height;struct m

6、an student1=75,1.80;struct man student2=75,1.80;结构体的初始化l初始化工作也可以在主函数外面进行l例:struct manint weight;float height;student1=75,1.80;main()struct man student2=75,1.80;结构体变量的复制与比较l结构体变量可以使用=进行复制l例如:lstudent1=student2;l结构体变量不可以使用逻辑运算符进行操作l以下操作是错误的:lstudent1!=student2;lstudent1=student2;l结构体的比较必须使用逐个成员分别比较的方法

7、单个成员的运算l结构体成员的运算与结构体成员的访问方法一样l例如:LiangYe.old+=1;LiangYe.old+;结构数组l我们使用以下结构体来表示一个人的属性struct manint old;float height;l如果要表示多个人呢?l我们可以声明一个结构体数组,例如:struct man student23;结构数组l程序struct manint old;float height;main()struct man student2=18,45,19,48结构数组举例struct marksint sub1;int sub2;int sub3;int total;main(

8、)int i;struct marks student3=67,78,89,0,76,87,98,0,84,72,94,0struct marks tatal;结构数组举例for(i=0;i=2;i+)studenti.total=studenti.sub1+studenti.sub2+studenti.sub3;total.sub1+=studenti.sub1;total.sub2+=studenti.sub2;total.sub3+=studenti.sub3;total.total+=studenti.total;结构体中的数组l数组可以作为结构体的成员struct marksint

9、sub3;int total;student2;l可以使用student1.sub2;来表示第2个学生的第3科得分。结构体中的数组举例struct marksint sub3;int total;main()int i,j;struct marks student3=67,78,89,0,76,87,98,0,84,72,94,0struct marks tatal;for(i=0;i=2;i+)for(j=0;j=2;j+)studenti.total+=studenti.subj;total.subj+=studenti.subj;total.total+=studenti.total;结

10、构体中的结构体l结构体可以嵌套,如我们声明一个结构体:struct salarychar name20;char department50;int basic_pay;int house_rent_allowance;int city_allowance;employee;结构体中的结构体l我们可以重新声明一个嵌套的结构体:struct salarychar name20;char department50;int basic_pay;struct int house_rent;int city;allowance;employee;结构体中的结构体l嵌套结构体的成员引用方法l非法引用empl

11、oyee.allowanceemployee.city结构体中的结构体l可以使用标记符来定义内部结构体变量struct payint house_rent;int city;struct salarychar name20;char department50;struct pay allowance;struct salary employee100;结构体与函数lC语言的精髓是函数的使用l把结构体的值从一个函数传递给另一个函数的方法有:l把结构体的每个成员作为函数的实参进行传递l将结构体的副本传递给被调用函数l使用指针以参数形式来传递结构体l方法2是最常用的方法之一l调用形式为:函数名(结构

12、体变量);l被调用形式为:返回值类型 函数名(结构体类型 结构体变量名);结构体与函数l如果被调用函数的返回值是一个结构体,那么对被调用函数声明时,其返回值类型应为struct+结构体标记符。l做实参的结构体变量与形参必须为相同的结构体类型。l当返回值为结构体时,必须将它赋值给相同类型的结构体。结构体与函数举例struct storeschar name20;float price;int quantity;struct stores update(struct stores product,float p,int q)product.price+=p;product.quantity+=q;

13、return product;结构体与函数举例main()float p_increment,value;int q_increment;struct stores item=“pen,3.5,10;scanf(“%f%d,&p_increment,&q_increment);item=update(item,p_increment,q_increment);value=item.p_increment*p_increment.q_increment;printf(“%f,item.price);printf(“%d,item.quantity);printf(“%f,value);联合体l联

14、合体是一种特殊形式的结构体,因此遵循与结构体相似的语法。l联合体的定义格式:union itemint m;float x;char c;code;联合体l联合体与结构体的区别是存储形式l在结构体中,每个成员都有自己的存储空间l在联合体中,所有成员使用相同的存储空间l因此,联合体一次只能存储一个成员。l联合体存储空间的大小,由占用空间最大的成员类型决定。l在联合体中,当某个成员被赋予一个新值后,该值将替代掉前一个成员的值。l例如以下将产生错误的输出:lcode.m=279;lcode.x=2344.56;lprintf(“%d,code.m);l因此,联合体初始化时,只能对第一个成员进行初始化,例如:lunion item abc=100;l而以下声明是非法的:lunion item abc=10.03;结构体的大小l使用一元运算符sizeof可以计算数据类型或者变量的大小。结构体也适用。l例如:sizeof(struct x);struct x y;sizeof(y);struct x z100;int sizeofarray=sizeof(z)/sizeof(struct x);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 工程图纸

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁