第七章结构与联合.ppt_第1页
第七章结构与联合.ppt_第2页
第七章结构与联合.ppt_第3页
第七章结构与联合.ppt_第4页
第七章结构与联合.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章结构与联合,结构,结构是一种用户自定义类型,它由多个相同数据类型或不同数据类型的成员组成 用户自定义类型中定义的每个变量称为数据成员,每个函数称为函数成员或成员函数,结构的定义,结构定义的格式: struct 结构类型名 成员定义1; 成员定义2; 成员定义n; ; 说明1、结构类型的定义以保留字struct开始 2、结构类型名即定义的结构类型名称 3、左右花括号之间的部分称为结构体 4、结构类型中定义的成员可以是除本身结构类型以外的任何已有类型,也可以是任何已有类型(包括本身类型)的指针类型,例: struct Person char name10; bool sex; int age

2、; 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; ,结构类型中定义的成员可以是除本身结构类型以外的任何已

3、有类型,也可以是任何已有类型(包括本身类型)的指针类型,结构变量的定义可采用三种格式,一、用结构类型名定义变量: 格式: 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 结构类型名 成员

4、定义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

5、; bx=“xxk”,55,3,27; /结构类型BBB有两个成员,一个字符型数组成员name和一个无名结构类型成员birth(无名结构类型定义时定义了成员),定义BBB结构类型的同时定义了该类型的变量bx,并初始化。,结构类型的声明,结构类型的声明即不完整定义 不完整定义是指只给出定义的类型保留字(即struct)和类型标识符(即结构类型名)而不给出结构体就结束定义 不完整定义只能作为指针类型使用并且必须在稍后给出它的完整定义,例: struct BB;/BB类型的不完整定义,即类型声明 struct AA char a; BB *b; /定义BB结构类型的指针 ; struct BB /给

6、出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字节,结构成员的访问操作,直接成员运

7、算符(又称点运算符) 直接成员运算符:. 使用方法:结构变量.成员名 例:结构变量x中有成员a,b,c,则访问成员a的方法:x.a 若x的成员b中又有成员变量t,则访问成员变量t的方法:x.b.t 表示结构数组vec中第5号元素的成员变量name,结构成员的访问操作,间接成员运算符() 使用格式:结构指针变量指针所指向的结构类型数据的一个成员名 例:指针p指向某结构数据,则p a是p指针所指向的结构数据的成员变量a,也可以等价地表示为(*p).a 直接成员运算符与间接成员运算符的优先级很高(仅次于括号),结构变量的赋值,赋值运算符:= =两边为同类型的结构变量 功能(与一般变

8、量的赋值相同):把右边变量的值拷贝到左边变量中;运算结果为左边变量的值;连续使用时结合性为从右向左。 例:z1=z2=z3 执行过程是:先把z1赋给z2,再把z2赋给z3,结果是z1、z2、z3三个结构变量中的成员值相同,结构数组保存和处理数据,已知人员记录的结构如下: struct Person /结构类型名为Person char name10; /姓名 bool isMale; /性别 int age; /年龄 float pay; /工资 ; 设计一程序,输入若干人员记录并保存在一个结构数组中。,输入函数定义 (输入记录并保存在结构数组中,预处理略) Person a10; /定义全局

9、结构数组a,存放人员记录 void input(int n) ; /输入一个人的姓名(字符串) cink; /输入一个人的性别(1表示男,0表示女) x.isMale=(k!=0); /赋值时0转换成false,1转换成true cinx.agex.pay; /输入年龄和工资 ai=x; /将结构变量x赋给ai,结构赋值 ,输出函数定义 void input(int n) cout“从键盘上输入具有Person结构的”n“个记录”endl; for(int i=0;in;i+) ; /显示姓名 cout(ai.isMale? “男”: “女”); /显

10、示性别 coutai.ageai.payendl; /显示年龄和工资 ,主函数 void main( ) int n; coutn; input(n); output(n); ,例7.2:从一个保存人员记录的结构数组中查找工资(pay域)最高的记录。 查找函数定义 void input(int n) int k=0; for(int i=1; iak.pay) k=i; /循环结束后,下标为k的元素具有最大工资值 coutendl“显示数组a中具有最大工资值的记录:”endl; (ak.isMale? “男”: “女”); coutak.ageak.payendl; ,结

11、构与函数,结构类型作为函数参数和函数返回值类型 P211例,结构与链表,链表是结构类型的一种特殊情况,这种结构类型的对象称为结点 这种结构类型有两个成员,一个是数据成员(结点的值域),另一个是指向自身结构的指针成员(结点的指针域) struct IntNode int data; intNode *next; ; 结点的值域data用于存储一个整数,指针域next用于指向自身结构类型的数据(可存储下一个结点的地址),从而形成链表。,假定具有IntNode类型的四个结点值分别为48, 56, 72和 83,它们依次被链接起来,则对应的链表结构示意图为:,指向第一个结点的指针称为表头指针。 第一个

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论