已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构体和联合体数据类型,结构体类型的定义和使用结构体数组结构体数据类型与指针的关系联合体数据类型,结构体类型的定义和使用,结构体数据类型的特点结构体类型由若干个数据项组成,这些数据项都属于一种已经有定义数据类型(基本数据类型或构造数据类型),结构体类型中的数据项称为结构体成员。程序使用结构体类型数据需要在源程序文件中进行定义。结构体数据类型只在其定义存在的源程序中起作用,在其他源程序中不能使用。同一个源程序文件中可以定义若干个结构体类型。结构体数据类型仍然是一类变量的抽象形式,系统不会为数据类型分配存储空间。使用结构体类型数据,必须要定义结构体数据类型的变量。,结构体类型的定义和使用,结构体类型定义,struct结构体名数据类型名结构体成员1;数据类型名结构体成员2;数据类型名结构体成员i;数据类型名结构体成员n;,/结构体类型定义示例structstudentintstuno;charname20;unsignedage;charsex;charaddress80;chartel20;,结构体类型的定义和使用,结构体变量定义,方法一:先定义结构体数据类型,然后定义该数据类型的变量。其定义形式与定义基本类型变量相同:数据类型名变量表;/在已经定义结构体类型structstudent的基础上定义结构体类型变量stu1和stu2structstudentstu1,stu2;,方法二:定义数据类型的同时定义结构体类型变量struct标识符结构体成员列表;结构体变量列表;/定义结构体类型structstudent的同时定义变量stu3和stu4。structstudentintstuno;charname20;unsignedage;charsex;charaddress80;chartel20;stu3,stu4;,方法三:直接定义结构体类型变量struct结构体成员列表;结构体变量列表;/直接定义(仅定义)结构体变量stu5和stu6。structstudentintstuno;charname20;unsignedage;charsex;charaddress80;chartel20;stu5,stu6;,结构体类型的定义和使用,结构体类型嵌套定义结构体类型的嵌套定义指的是在一个结构体数据类型中,某些结构体成员的数据类型是另外一个在同一C程序中已经定义完成的结构体数据类型。,structdateintyear;intmonth;intday;,structstudent1intstuno;charname20;structdatebirthday;unsignedage;charsex;charaddress80;chartel20;,数据类型:structdate,结构体类型的定义和使用,typedef简单应用数据类型的别名使用typedef为已经存在的数据类型取别名后,数据类型的本名和别名在源程序中具有同样的作用。定义别名的一般形式为:typedef数据类型名别名;,/为系统内置数据整型(int)类型取别名INTEGER。typedefintINTEGER;/此后,intj,k;和INTEGERj,k;的意义相同。,/*先定义构造数据类型,然后再取别名*/structstudentintstuno;charname20;structdatebirthday;unsignedage;charsex;charaddress80;chartel20;typedefstructstudentSTU;,/*在定义构造数据类型的同时取别名*/typedefstructstudentintstuno;charname20;structdatebirthday;unsignedage;charsex;charaddress80;chartel20;STU;,结构体类型的定义和使用,typedef简单应用构造复杂数据类型使用typedef还可以构造复杂结构的数据类型,由于不同的应用环境对复杂结构数据的要求不同,所以使用typedef关键字构造复杂结构数据没有统一的形式,在应用程序中应该根据需要构造合适形式的数据类型。Ex0701用typedef构造指定长度的字符串数据类型。Ex0702用typedef构造指定行数和列数的二维数组类型。Ex0703用typedef构造指针数据类型。,结构体类型的定义和使用,结构体变量的使用初始化定义结构体类型变量的同时也可以进行初始化。结构体变量初始化的形式类似于一维数组,不同之处在于结构体变量的成员值依据其所属类型可以是不同类型的数据。结构体变量初始化的一般形式为:struct结构体名变量名=结构体变量成员值列表;,structstudents1=12,LiMing,1992,12,30,20,m,12songlin,65102621;,structstudents1=12,LiMing,1992,12,30,20,m,12songlin,65102621;,结构体类型的定义和使用,结构体变量的使用引用通过操作结构体变量的每一个数据项达到操作结构体变量的目的。对于结构体变量中每一个数据项(成员分量)的引用要使用成员运算符(点运算符)以构成结构体成员分量,结构体成员分量的一般形式为:结构体变量名.成员分量名对于嵌套的结构体类型变量,访问其成员时应采用逐级访问的方法,直到获得所需访问的成员为止。其形式为:结构体变量名.一级成员分量名.二级成员分量名,/结构体分量引用示例、s1.age、s1.sexs1.birthday.year、s1.birthday.month、s1.birthday.day,结构体类型的定义和使用,结构体变量的使用输入输出C程序中只能将结构体变量的成员分量作为输入输出的对象。对结构体变量成员分量输入输出操作时应该特别注意对应成员分量的数据类型。两个同类型的结构体变量可以直接进行赋值操作。Ex0704结构体变量的输入/输出示例。,scanf(%s,%d,%u,,structstudents1=12,liming,1988,12,30,22,m,12songlin,65102621;/将结构体变量s1赋值给同类型结构体变量s2structstudents2=s1;,结构体类型的定义和使用,结构体变量的使用做函数参数结构体类型变量和结构体类型变量的成员都可以作为函数的参数在函数间进行传递,数据的传递仍然是“值传递方式”。使用结构体类型变量作为函数参数时,被调函数的形参和主调函数的实参都是结构体类型的变量,而且属于同一个结构体类型。使用结构体类型变量的成员作为函数参数时,其中被调函数中的形参是普通变量,而主调函数中的实参是结构体类型变量中的一个成员,并且形参和实参的数据类型应该对应一致。Ex0705利用结构体变量做函数参数,实现计算某学生3门课程平均成绩的功能。,结构体类型的定义和使用,结构体变量的使用做函数的返回值类型定义结构体数据类型后,同一程序中也可以用该结构体数据类型作为函数的返回值类型。函数的返回值类型是结构体类型时,函数执行完成后返回的就是一个结构体数据,称这种函数为返回结构体类型的函数。其函数定义的一般形式为:Ex0706已知某学生几门课程的成绩,利用返回结构体类型函数实现统计总成绩功能。,struct标识符函数名(形式参数表及其定义)/函数体,结构体和联合体数据类型,结构体类型的定义和使用结构体数组结构体数据类型与指针的关系联合体数据类型,结构体数组,结构体数组的定义定义结构体数组有3种方法,分别是:先定义结构体类型然后定义结构体数组;在定义结构体类型的同时定义结构体数组;只定义某种结构体类型的数组。在定义结构体数组的同时还可以定义同类型的结构体变量。,/方法一示例structpersoncharname20;intcount;structpersonp130,p2100;,/方法二示例structpersoncharname20;intcount;p130,p2100;,/方法三示例structcharname20;intcount;p130,p2100;,结构体数组,结构体数组的初始化结构体数组各元素首先以数组的形式在系统内存中连续存放,其中的每一数组元素的成员分量则按类型定义中出现的顺序依次存放。结构体数组初始化的一般形式是:struct标识符数组名长度=初始化数据列表;结构体数组初始化形式与较它高一维的普通数组初始化形式类似。一维结构体数组的初始化就类似于普通二维数组初始化,初始化中的注意事项也与二维普通数组初始化时相同或类似。,/结构体数组初始化示例typedefstructpersoncharname20;intcount;PER;/单行初始化形式PERper3=Zhang,0,Wang,0,Li,0;/分元素初始化形式PERper3=Zhang,0,Wang,0,Li,0;,结构体数组,结构体数组元素的使用通过操作数组的每一个元素达到操作数组的目的。结构体数组元素需要用下标变量的形式表示。结构体数组元素就相当于一个结构体变量,将引用数组元素的方法和引用结构体变量的方法结合起来就形成了引用结构体数组元素成员分量的方法,其一般形式为:数组名下标.成员名不能将结构体数组元素作为一个整体直接进行输入输出,也需要通过输入输出数组元素的每一个成员分量达到输入输出结构体数组元素的目的。可以将结构体数组元素作为一个整体赋给同类型数组的另外一个元素,或赋给一个同类型的结构体变量。Ex0707结构体数组操作(数组元素引用、数组元素的输入输出)示例。,结构体数组,结构体数组作函数的参数在函数调用期间实参结构体数组将它的全部存储区域或者部分存储区域提供给形参结构体数组共享。如果需要把整个实参结构体数组传递给被调函数中的形参结构体数组,可以使用实参结构体数组的名字或者实参结构体数组第一个元素(0号元素)的地址。如果需要把实参结构体数组中从某个元素值后的部分传递给被调函数中的形参结构体数组,则使用实参结构体数组某个元素的地址。Ex0708统计并输出年龄在18岁以上的学生人数。,结构体和联合体数据类型,结构体类型的定义和使用结构体数组结构体数据类型与指针的关系联合体数据类型,结构体数据类型与指针的关系,结构体类型变量与指针的关系结构体类型变量的指针就是该结构体类型变量所占内存区域的起始地址,同样也可以定义一个指针类型的变量来存放这个地址,即指向这个结构体类型变量。结构体类型指针变量定义形式为:struct结构体类型名*指针变量名;,/设已定义类型structstudent,指针变量ptr定义如下structstudent*ptr;,结构体类型变量与指针的关系使用取地址运算符将结构体变量的地址赋给指针变量。通过指向结构体变量的指针变量访问结构体变量成员分量使用的形式:(*指针变量).成员名;指针变量名-成员名;,结构体数据类型与指针的关系,/先定义指针变量,然后赋值structstudentstudent,*ptr;ptr=,Ex0709已知某学生3门课程的成绩存放在一个结构体变量中,请设计一个独立的函数计算该学生的平均成绩,要求函数使用结构体类型指针变量做函数的形参。,结构体数据类型与指针的关系,结构体类型数组与指针的关系通过将一个结构体数组元素的地址赋值给同类型指针变量使得该指针变量指向结构体数组元素。结构体数组元素等价于同类型普通变量,通过指针变量操作数组元素的方式与通过指针变量操作结构体变量方式类似。,structAcharc;intx;structAa5,*p1;p1=,/数组元素a2的操作方式:a2.x(*p1).xp1-x,结构体数据类型与指针的关系,结构体类型数组与指针的关系通过将结构体数组的起始地址赋给同类型的指针变量使得该指针变量指向结构体数组。将通过指针操作一维数组的形式与通过指针操作结构体变量的形式结合,即形成了通过指针变量操作结构体数组的表达式形式。,structAcharc;intx;structAa5,*p1;p1=a;,/数组元素ai的操作方式:(*(p1+i).x(p1+i)-x,Ex0710统计并输出年龄在18岁以上的学生人数。,结构体数据类型与指针的关系,单链表基本操作线性表概念线性表有有限个数据组成,各数据元素之间的逻辑结构可以用一个简单的线性结构表示出来,其特征是:除第一个和最后一个元素外,任何一个元素都只有一个直接前驱和一个直接后继;第一个元素无前趋而只有一个直接后继;最后一个元素无后继而只有一个直接前趋。线性表在计算机存储设备中的具体存储形式称为数据的存储结构,亦称为数据的物理结构。在对线性表的处理中,其主要的存储结构有顺序存储结构和链式存储结构两种。,结构体数据类型与指针的关系,单链表基本操作使用的数据结构线性表采用链式存储结构时,线性表中的数据元素称为结点。在线性链表的构造中,除第一个结点之外,其余每一个结点的存放位置由该结点的前驱在其指针域中指出。为了确定线性链表第一个结点的存放位置,使用一个指针变量指向链表的表头,这个指针变量称作“头指针”。线性链表的最后一个结点没有后继,为了表示这个概念,该结点的指针域赋值为空(NULL或)。,结构体数据类型与指针的关系,单链表基本操作结点结构的C语言描述方式,typedefstructnodeelementtypedata;structnode*next;NODE;,/构造示例程序使用的数据结构,存入头文件ex0711.htypedefstructstucharname20;doublescore;structstu*next;NODE;,elementtype是某种用于表示结点数据域的数据类型NODE是结点类型structnode的别名,结构体数据类型与指针的关系,单链表基本操作单链表的构造单链表有正向生成构造法和反向生成构造法两种。正向生成的步骤主要分为两步:首先创建单链表的头指针,然后将新结点依次链接到单链表的尾部;反向生成方法与正向生成类似,只不过将新结点依次插入到单链表的头部。,结构体数据类型与指针的关系,单链表基本操作单链表的输出单链表的输出实质上就是对某一头指针指向的单链表进行遍历,也就是将单链表中的每一个数据元素结点从表头开始依次处理一遍。,结构体数据类型与指针的关系,单链表基本操作单链表上的插入运算实现在单链表上插入一个结点的基本过程如下:创建一个新结点;按要求寻找插入点;被插入结点的指针域指向插入点结点的后继结点;插入点结点的指针域指向被插入的结点;,结构体数据类型与指针的关系,单链表基本操作单链表上的删除运算实现在单链表中删除一个数据元素结点的基本过程如下:查找被删除结点以及其前趋结点;被删除结点的前趋结点指针域指向被删除结点的直接后继结点;释放被删除结点;,结构体数据类型与指针的关系,单链表基本操作综合示例将单链表的最基本运算函数组织起来即可形成一个对单链表进行简单处理的程序。Ex0711带头结点单链表基本操作示例。要求设计一个简单的菜单,根据对菜单项的选择分别实现带头结点单链表的构造操作、插入操作、删除操作和输出操作。,结构体和联合体数据类型,结构体类型的定义和使用结构体数组结构体数据类型与指针的关系联合体数据类型,联合体数据类型,联合体类型的定义C语言通过使用联合体(共用体)类型数据实现同一存储区域数据(类型)的可变性和数据项处理的灵活性。联合体类型的定义确定了参与共用存储区域的成员项以及成员项具有的数据类型。联合体(共用体)类型定义的一般形式:,union联合体名数据类型成员项1;数据类型成员项2;数据类型成员项n;,/联合体类型定义示例unionkeTestunsigendshortx;charch4;,联合体数据类型,联合体类型的定义C语言中还允许结构体、联合体以及和数组等构造类型数据相互嵌套。,unionuninta,structfloatb;charc;s;,联合体数据类型un中的一个成员s是结构体类型变量,变量s与整型变变量a共用同一段存储空间。,联合体数据类型,联合体变量定义方法一:先定义联合体类型,然后定义联合体变量;union联合体名成员列表;union联合体名变量列表;方法二:定义联合体类型的同时定义联合体类型变量;union联合体名成员列表;变量列表;方法三:不定义类型名直接定义联合体类型变量;union成员列表;变量列表;,联合体数据类型,联合体变量初始化问题由于联合体变量的成员不会同时出现,所以程序中一般不对联合体变量进行初始化。如果要对联合体变量进行初始化,则只能提供变量中第一个成员的初始化值。,unionTinta;doubleb;unionTx=10;,只能初始化变量x的a成员值,联合体数据类型,联合体变量的引用联合体变量不能整体操作处理,也只能通过操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 婚庆与摄像协议合同
- 化工企业投资合同
- 商铺买了没签合同
- 乙公司加工服装合同
- 员工占股份合同范本
- 合同终止协议的范本
- 场地出租意向协议书
- 咨询兼职协议书范本
- 处方免责协议书范本
- 地板合铺设合同范本
- 山姆供货合同协议书
- 广铁集团校园招聘机考题库
- NB-T31045-2013风电场运行指标与评价导则
- 三减三健健康知识讲座
- 中华民族共同体概论课件第十六讲文明新路与人类命运共同体
- 心灵航标:带你感悟延安精神智慧树知到期末考试答案2024年
- 高中会考历史模拟试卷及参考答案
- 小班综合《积木娃娃本领大》课件
- 交通中国智慧树知到期末考试答案2024年
- 2024年浙江杭州西湖云创集团有限公司招聘笔试参考题库附带答案详解
- 供电企业舆情的预防及处置
评论
0/150
提交评论