




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章结构体与共用体,【教学要求】1理解结构体的含义。2掌握结构体类型变量的定义方法。3掌握结构体类型变量的引用方法。4掌握结构体类型变量如何在定义的同时初始化。5理解共同体的含义,掌握共同体类型变量的定义方法。6.了解结构体数组的定义和数组元素的引用。7了解指向结构体类型数据的指针的概念及使用。8了解链表结点的结构形式,链表的基本操作。9了解枚举类型的定义,及枚举类型的输入输出。10了解TYPEDEF的作用。,第八章结构体与共用体,结构体(struct)共同体(union)结构体与共用体小结枚举类型(enum)typedef定义类型,结构体(struct),结构体的概念结构体数组结构体指针,结构体的概念,结构体的定义结构体变量的存储特点结构体变量的引用结构体的初始化,结构体的定义,1、含义:不同类型数据的集合。2、功能:用于描述一个“概念”。(或记录)如:numnamesexagescoreaddr10010LiFunM1887.5BeiJing3、定义方法:方法一:在定义结构体类型的同时,直接给出结构体变量。如:struct结构体名结构体成员变量的定义;变量名1,变量名2,.,变量名n;方法二:先给出结构体类型的定义,再定义结构体变量。如:struct结构体名结构体成员变量的定义;例:;struct结构体名变量名1,变量名2,.,变量名n;4、要点:,方法二:structstudentintnumber;charname20;charsex;intage;floatscore;charaddr30;structstudentstudent1,student2;,方法一:structstudentintnumber;charname20;charsex;intage;floatscore;charaddr30;student1,student2;请注意两种方法的不同特点:1、“;”的用法;2、方法二可以用一个*.h文件来存储结构体的定义。,4、要点:结构体名(struct):用于标识一种新的数据类型,即结构体类型,可以省略。注意区分结构体类型与基本数据类型的不同,它是复合数据类型。结构体成员变量与普通变量的定义一样,它还可以是结构体变量。,structdateintmonth,day,year;structstudentintnum;charname20;charsex;intage;structdatebirthday;charaddr30;student1,student2;,结构体变量的存储特点,如:structstudentintnumber;charname5;charsex;intage;floatscore;charaddr10;student1,student2;,structstudent所占存储空间的大小为:各成员变量所占存储单元字节数之和。sizeof(student),结构体类型变量的引用,一、原则:通过结构体的成员来引用结构体变量。二、成员的引用方法为:结构体变量名.成员名三、要点:1.结构体变量不能整体输入输出,只能对它的成员进行操作。如:student1.num;2.如果成员本身又是一个结构体类型,则要使用若干个成员运算符,逐级找到最底层的成员。如:student1.birthday.day3.成员变量可以象一般的变量一样进行各种运算,只是在运算时要加上“.”运算符。4.可以引用成员的地址。,结构体变量的初始化,一、只可以给主函数中或外部存储类别和静态存储类别的结构体变量、数组赋初值。1、对外部存储类型的初始化.2、对静态存储类型的结构体变量进行初始化二、给结构体变量赋初值不能跨越前面的成员而只给后面的成员变量赋值。,例exp8_1:对外部存储类型的初始化.#includestructstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a=99641,”LiPing”,M,56,”TianjinStreet”;main()printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,,a.sex,a.addr);,例exp8_2:对静态存储类型的结构体变量进行初始化.#includemain()staticstructstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a=99641,”LiPing”,M,56,”TianjinStreet”;printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,,a.sex,a.addr);,结构体数组,结构体数组的含义:数组元素是结构体类型数据的数组称为结构体数组。结构体数组的定义结构体数组的初始化结构体数组的应用举例,结构体数组的定义,一、含义:若干个相同的结构体类型变量组成的数据集合。二、定义方法:struct结构体名例如:结构体成员定义;数组名元素个数;三、结构体数组的使用方法1、通过数组的下标(或指向数组的指针)来访问结构体变量。2、再通过结构体变量的成员实现结构体数据的访问。形式为:数组名下标.成员名如:=“WangYing”;,structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;structstudentstu3;,structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;stu3;结构体数组的物理含义:表示实体(或记录)的个数。,1、含义:在定义结构体数组时完成数组元素的赋值2、方法:与一般数组元素赋初值的方法相同。structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a3=99641,”LiPing”,M,56,”TianjinStreet”,99341,”ZhangFan”,F,78,”BeijingRoad”,99441,”RenZhong”,M,34,”ShenyangRoad”;,结构体数组的初始化,例exp8_3:对候选人得票的统计程序,设有三个候选人,每次输入一个候选人的名字,最后统计出每个候选人的得票的结果.#includestructpersoncharname20;intcount;leader3=“Li”,0,”Zhang”,0,”Fun”,0;main()inti,j;charleader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_name);for(j=0;jn+和+p-n,1、结构体指针的定义:main()structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a=070441,”LiPing”,M,56,”TianjinStreet”,*p=,指向结构体数组的指针,1、定义方法举例:2、使用要点:p+:是指针p指向数组的下个元素,而这个元素是由结构体类型数据组成的,它不是一个简单的变量.(+p)-num:先使指针p指向结构体数组当前位置的下一个元素,再访问其元素成员num;请区别与(p+)-num的不同。,例exp8_4:指向结构体数组的指针#includestructstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a3=070441,”LiPing”,M,56,”TianjinStreet”,070442,”ZhangFan”,F,78,”BeijingRoad”,070443,”RenZhong”,M,34,”ShenyangRoad”;main()structstudent*p;for(p=a;pnum,p-name,p-sex,p-age,p-score,p-addr);,指向结构体的指针作函数的参数,1、用结构体变量的成员作函数的参数与一般变量作函数的参数一致;2、用指向结构体变量的指针作函数的参数,实参将地址传递给形参,与前面指针作函数参数一致;3、新版本的c语言允许将整个结构体变量作为函数的参数进行传递,要求形参与实参的类型必须一致,而且程序占用内存大,运行速度慢.4、举例(参见课本p227),单链表,一、链表的含义:当一个结构体中有一个成员是指向本结构体的指针时,通过这样的指针可以将若干个相同的结构体存储单元连接成一个新的数据结构。举例:二、功能:可以根据需要动态的开辟存储空间。1.malloc(size):在内存中动态的分配一个长度为size的连续空间;2.calloc(n,size):在内存中分配n个长度为size的连续空间;3.free(ptr):释放由ptr指针指向的内存区域.二、链表操作建立链表、在链表插入结点、删除链表结点,单链表的结构:structstudentintnum;floatscore;structstudent*next;,要点:1、链表中的元素在内存中存放顺序是不连续的。由next指针来连接各节点。2、链表数据结构的实现,必须利用指针变量.,节点,建立含n个节点的链表过程:,structstudent*creat()structstudent*head,*p1,*p2;n=0;head=NULL;p1=p2=(structstudent*)(malloc(sizeof(structstudent);scanf(“%ld,%f”,在链表中插入结点的过程,.,删除链表结点的过程:,malloc(),共同体(union),共同体的含义与定义方法共同体的存储特点共同体的使用,共同体的含义与定义方法,一、含义:几个不同变量共同占用同一块内存空间,只是一种覆盖技术,所谓的共同占用是指这几个变量共同拥有内存的同一个起始地址.共用相同的存储单元。二、定义形式:union共用体名例如:成员表列;uniondate变量表列;inti;charch;floatf;a,b,c;,共同体的存储特点,1.同一块内存可以存放不同类型的数据,但在某一时刻只能存放其中的一种;2.共用体变量中起作用的成员是最后一次存放的成员;3.共用体变量的地址和它的成员的地址是同一个地址;4.共用体变量不能整体被赋值,也不能给共用体变量赋初值;5.不能把共用体变量作为函数的参数进行传递,但可以使用指向共用体变量的指针作为函数的参数;6.结构体类型和共用体类型可以嵌套使用。,例如:uniondateinti;charch;floatf;a,b,c;,共同体的使用,例exp8_5:已知字符“0”的ASCII马为十六进制的30,下面程序的输出为:main()unionunsignedcharc;unsignedinti4;z;z.i0=0 x39;z.i1=0 x36;printf(“%cn”,z.c);运行结果:9,例:下列程序的运行结果是什么?#includemain()unionzjinta;charch2;au;au.a298;printf(dndn,au.ch0,au.ch1);运行结果为:,42,1,结构体与共用体小结,一、共同点:都是不同类型数据的集合二、不同点:1、结构体中各个成员均在内存中存在,而共同体中只有一个成员存在于内存中。2、结构体占用的存储空间是所有成员所占空间的和;=sizeof(结构体名)而共用体所占内存空间的大小是所有成员中占用存储空间最大的一个成员的占用空间的值。3、结构体中各个成员相互独立、互不干扰,共同体中改变一个成员的值,会影响到其它成员的值。4、结构体与共同体可以互为成员。,枚举类型,1、含义:“枚举类型”是将变量的取值一一列举出来,变量的取值只限在列出来的取值范围内.2、定义方法:enumweekdaysun,mon,tue,wed,thu,fri,sat;enumweekdayworkday;枚举类型的变量workday的取值只能在sun-sat之间.3、使用要点:4、应用举例,要点:1.枚举元素在c语言中按常量来处理,不是变量,不能被赋值;2.作为常量的枚举元素,它们是有值的.在编译是按它们的定义顺序取值为0,1,2,3也可以在定义类型时人为定义枚举元素的值,如enumweekdaysun=7,mon=1,tue,wed,thu,fri,sat;enumweekdayworkday;3.枚举值可以用来做条件判断,如:if(workday=mon)if(workdaytue)4.一个整数不能直接赋值给一个枚举变量,如:workday=2;()workday=(enumweekday)2;()workday=tue;(),例:编写程序,功能是输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年外汇借款合同中的借款人资质审核及贷款审批流程
- 2025橙子产业园区基础设施建设合作合同范本
- 2025房地产与学校绿色校园项目共建合同模板
- 2025版家居用品生产外包合同模板
- 2025版网络安全三方协议担保合作合同
- 2025年办公楼安防系统设备采购与施工监理合同
- 2025年企业员工食堂运营管理承包合同
- 诵读知识培训总结课件
- 说课的课件教学课件
- 说明文要点课件
- 铁路专项病害课件
- 开学安全教育课件
- 2025年学历类自考专业(学前教育)学前儿童发展-学前教育原理参考题库含答案解析(5套)
- 2025-2026学年人教版(2024)初中化学九年级上册教学计划及进度表
- 日本设备销售合同范本
- (2024)大学生宪法知识竞赛题库及答案
- 经营者身份证明书
- 高中英语3500词汇表
- 《绣球》课件
- 遥感图像的目视判读
- 轧制原理-PPT课件
评论
0/150
提交评论