好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第七章结构与联合.ppt

31页
  • 卖家[上传人]:hs****ma
  • 文档编号:601288652
  • 上传时间:2025-05-16
  • 文档格式:PPT
  • 文档大小:172KB
  • / 31 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七章结构与联合,结构,结构是一种用户自定义类型,它由多个相同数据类型或不同数据类型的成员组成,用户自定义类型中定义的每个变量称为数据成员,每个函数称为函数成员或成员函数,结构的定义,结构定义的格式:,struct,结构类型名,成员定义1;,成员定义2;,成员定义,n;,;,说明1、结构类型的定义以保留字,struct,开始,2、,结构类型名,即定义的结构类型名称,3、左右花括号之间的部分称为结构体,4、结构类型中定义的成员可以是除本身结构类型以外的任何已有类型,也可以是任何已有类型(包括本身类型)的指针类型,例:,struct,Person,char name10;,bool,sex;,int,age;,float pay;,;,定义了一个结构类型,类型名称为,Person,,结构类型中有四个不同数据类型的成员(注意:定义的不是变量,是一种类型),然后可用结构类型名作类型修饰符来定义结构类型的变量,Person x,y;/,定义了两个,Person,结构类型的变量结构类型定义举例,(1),struct,A,int,a,b,c;,;,(2),struct,B,char,ch,;,int,x,y;,double z;,(3),struct,C,char*cp;,int,a5;,;,(4),struct,F,double data;,F*next;,结构类型中定义的成员可以是除本身结构类型以外的任何已有类型,也可以是任何已有类型(包括本身类型)的指针类型,结构变量的定义,可采用三种格式,一、用结构类型名定义变量:,格式:,struct,结构类型名,变量名,=,初始化数据,或,同类型变量名,,,结构类型名相当于类型修饰符,初始化数据是由每一个成员值构成的初始化数据,也可以是同类型的变量名。

      例:,struct Arith,char op;,int,a,b;,;/,定义结构类型,Arith,x,y;/,定义两个,Arith,结构类型的变量,x,y,Arith,z1=+,10,xx,z2=*,60,z3=z1;/,定义变量,z1,z2,并初始化,二、定义结构类型的同时定义变量,格式:,struct,结构类型名,成员定义1;,成员定义2;,成员定义,n;,变量名=初始化数据或同类型变量名,;,例:,struct,AAA,char s20;,int,top;,a1=“Microsoft”,0,a2=a1,a3,*,ap,;,/,以上语句在定义,AAA,结构类型的同时定义了三个变量,a1,a2,a3,及一个指针变量,ap,且,a1,被初始化三、定义无名结构类型的同时定义变量,格式:,struct,成员定义1;,成员定义2;,成员定义,n;,变量名=初始化数据或同类型变量名,;,这种格式没有类型名,因此必须在定义结构类型时定义变量,struct,BBB,char name10;,struct,int yy,mm,dd,;,birth;,bx,=“,xxk,”,55,3,27;/,结构类型,BBB,有两个成员,一个字符型数组成员,name,和一个无名结构类型成员,birth(,无名结构类型定义时定义了成员),定义,BBB,结构类型的同时定义了该类型的变量,bx,,,并初始化。

      结构类型的声明,结构类型的声明即不完整定义,不完整定义是指只给出定义的类型保留字(即,struct,),和,类型标识符(即结构类型名)而不给出结构体就结束定义,不完整定义只能作为指针类型使用并且必须在稍后给出它的完整定义,例:,struct,BB;/BB,类型的不完整定义,即类型声明,struct,AA,char a;,BB*b;/,定义,BB,结构类型的指针,;,struct,BB /,给出,BB,的完整定义,int,b;,AA a;/,使用已定义的,AA,结构类型,;,结构大小的计算,结构大小计算方法:,所有成员占用空间大小的总和,例:,struct,AA,int,*a;,;,/,一个成员是整型指针,指针类型占用空间是4字节,因此结构类型,AA,占4字节例:,struct,BB,int,a;,int,b;,;/,成员,a,b,是整型,因此结构类型,BB,占8字节,struct,CC,char*data;,BB s;,CC*link;,;/,成员,data,占4字节,,s,是,BB,结构类型,占8字节,,link,是指向自身结构类型的指针,占4字节,因此结构类型,CC,占16字节,结构成员的访问操作,直接成员运算符(又称点运算符),直接成员运算符:,.,使用方法:结构变量.成员名,例:结构变量,x,中有成员,a,b,c,,则访问成员,a,的方法:,x.a,若,x,的,成员,b,中又有成员变量,t,,则访问成员变量,t,的方法:,x.b.t,vec,5.name,表示结构数组,vec,中第5号元素的成员变量,name,结构成员的访问操作,间接成员运算符(,),使用格式:结构指针变量,指针所指向的结构类型数据的一个成员名,例:指针,p,指向某结构数据,则,p a,是,p,指针所指向的结构数据的成员变量,a,,也,可以等价地表示为(*,p).a,直接成员运算符与间接成员运算符的优先级很高(仅次于括号),结构变量的赋值,赋值运算符:=,=两边为同类型的结构变量,功能(与一般变量的赋值相同):把右边变量的值拷贝到左边变量中;运算结果为左边变量的值;连续使用时结合性为从右向左。

      例:,z1=z2=z3,执行过程是:先把,z1,赋给,z2,,再把,z2,赋给,z3,,结果是,z1、z2、z3,三个结构变量中的成员值相同,结构数组保存和处理数据,已知人员记录的结构如下:,struct,Person /,结构类型名为,Person,char name10;/,姓名,bool isMale,;/,性别,int,age;/,年龄,float pay;/,工资,;,设计一程序,输入若干人员记录并保存在一个结构数组中输入函数定义,(,输入记录并保存在结构数组中,预处理略,),Person a10;,/,定义全局结构数组,a,,存放人员记录,void input(,int,n),cout,“,从键盘上输入具有,Person,结构的,”,n“,个记录,”,endl,;,int,i,k;,Person x;,/,定义局部结构变量,x,,用于输入的变量,for(i=0;ix.name;,/,输入一个人的姓名(字符串),cin,k;,/,输入一个人的性别(1表示男,0表示女),x.,isMale,=(k!=0);,/,赋值时0转换成,false,1,转换成,true,cin,x.agex.pay;,/,输入年龄和工资,ai=x;,/,将,结构变量,x,赋给,ai,,结构赋值,输出函数定义,void input(,int,n),cout,“,从键盘上输入具有,Person,结构的,”,n“,个记录,”,endl,;,for(,int,i=0;in;i+),cout,ai.name;,/,显示姓名,cout,(ai.,isMale,?“,男”:“女”);,/显示性别,cout,ai.ageai.pay,endl,;,/,显示年龄和工资,主函数,void main(),int,n;,cout,“,请输入一个正整数(1=,nn;,input(n);,output(n);,例,7.2:从一个保存人员记录的结构数组中查找工资(,pay,域)最高的记录。

      查找函数定义,void input(,int,n),int,k=0;,for(,int,i=1;iak.pay)k=i;,/,循环结束后,下标为,k,的元素具有最大工资值,cout,endl,“,显示数组,a,中具有最大工资值的记录:”,endl,;,cout,ak.name(ak.,isMale,?,“,男”,:,“女”,);,cout,ak.ageak.pay,endl,;,结构与函数,结构类型作为函数参数和函数返回值类型,P211,例,结构与链表,链表是,结构类型的一种特殊情况,这种结构类型的对象称为结点,这种结构类型有两个成员,一个是数据成员(结点的值域),另一个是指向自身结构的指针成员(结点的指针域),struct IntNode,int,data;,intNode,*next;,;,结点的值域,data,用于存储一个整数,指针域,next,用于指向自身结构类型的数据(可存储下一个结点的地址),从而形成链表假定具有,IntNode,类型的四个结点值分别为48,56,72和 83,它们依次被链接起来,则对应的链表结构示意图为:,48,56,72,83,f,data,next,指向第一个结点的指针称为表头指针。

      第一个结点又称为表头结点最后一个结点为表尾结点,表尾结点的指针为空指针,后继结点:结点指针域所指向的结点称为该结点的后继结点,前驱结点:该结点又称为其后继结点的前驱结点,当,访问一个链表时,必须从表头指针出发顺序进行,只有第一个结点被访问后,才能根据第一个结点的指针域的值访问第二个结点,依次类推,表尾结点只能最后被访问到因此链表具有顺序存取特性操作符重载,操作符重载函数定义,单目操作符重载函数的定义格式:,返回类型,operator,单目操作符,(,一个用户自定义类型参数说明,),函数体,双目操作符重载函数的定义格式:,返回类型,operator,双目操作符,(,第一个参数说明,,,第二个参数说明,),函数体,操作符重载函数的调用,单目操作符重载函数调用格式:,单目操作符,实参,等价于:,operator,单目操作符(实参),双目操作符重载函数调用格式:,第一个实参,双目操作符,第二个实参,等价于:,operator,双目操作符,(,第一个实参,,,第二个实参,),联合,联合也是一种用户自定义的类型,它与结构类型相似,也由若干个数据成员组成联合的特点:,在任一时刻,联合中只有一个成员是可访问的,其余所有成员都是不可访问的。

      结构中所有成员在任一时刻都是可访问的),联合类型对象所占存储空间的大小是所有数据成员所占存储空间的最大值联合的定义与使用,联合的定义和使用与结构类型相同,不同点:匿名联合,在联合类型的定义中,既没有给出类型名也没有给出变量也是有意义的,此时联合的成员可以直接使用这种联合被称为匿名联合。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.