第六章结构和联合.ppt

上传人:本田雅阁 文档编号:2261728 上传时间:2019-03-12 格式:PPT 页数:27 大小:316.51KB
返回 下载 相关 举报
第六章结构和联合.ppt_第1页
第1页 / 共27页
第六章结构和联合.ppt_第2页
第2页 / 共27页
第六章结构和联合.ppt_第3页
第3页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第六章结构和联合.ppt》由会员分享,可在线阅读,更多相关《第六章结构和联合.ppt(27页珍藏版)》请在三一文库上搜索。

1、1,数据类型,整型 (int),实型,字符型(char) 布尔型(bool) 空类型(void),数组 结构型(struct) 共用体(union) 枚举(enum) 类(class),C+的基本数据类型,指针,2,第六章 结构体、共用体、 枚举类型,6.1 结构体类型 6.2 共用体类型 6.3 枚举类型,3,一、例子 例:描述5个学生的信息:姓名、学号、性别、年龄、成绩,char num10; char name30; char sex; int age; float score; 不能反映出它们之间的内在联系,不便于管理,1、不能用数组描述 2、分别定义为相互独立的简单变量,需要定义一种

2、能将这些信息组合在一起的新型数据结构 结构类型,4,struct 结构体类型名 类型标识符 成员名1; 类型标识符 成员名2; . 类型标识符 成员名n; ;,在某种情况下,合法标识符可省:无名结构体,成员类型可以是任意类型:基本型或构造型,struct是关键字, 不能省略,结构类型:用户自己指定的一种数据类型,包含若干个类型不同的数据项,结构类型的一般形式:,结构体类型中的成员的数据类型可以不相同。,6.1 结构类型,5,struct date int month; int day; int year; ;,struct man char name15; char sex; int age;

3、 date birthday; ;,说明一个结构类型date,含三个整型数据成员,在此基础上,又可说明另一个结构类型man,birthday,Name,sex,age,year,描述一个人的出生日期:,6,平面上的点:,struct point2 float x; /*横坐标*/ float y; /*纵坐标*/ ; 如考虑空间中的点, 可作如下定义: struct point3 float x; /*X坐标*/ float y; /*Y坐标*/ float z; /*Z坐标*/ ;,7,结构体类型定义时要注意问题:,1)结构体类型的定义是数据类型的定义,不占用内存 2)声明结构体类型的位置一

4、般在文件的开头,在所有函数(包括main)之前,以便所有函数都能利用它来定义变量,当然也可以在函数中声明。 3)结构体类型中的成员的数据类型可以不相同。 每一个成员也叫结构体的域,成员表列称为域表 每一个成员的定义必须要有类型声明 4)注意分号;,8,(1) 在声明类型的同时,定义结构变量 struct 结构体名 成员表列 变量名表列;,例如: struct man char name15; char sex; int age; date birthday; ml;,6.1.2 结构变量定义及初始化,9,(2) 直接定义结构体类型变量 struct 成员表列 变量名表列;,例如: struct

5、 char name15; char sex; int age; date birthday; ml,m3;,10,(3) 先声明结构体类型,再定义变量名 struct 结构体名 成员表列; ; 结构体类型名 变量表列;,例如: struct man char name15; char sex; int age; date birthday; ; man m2,*p=&m2; struct man m3;,11,m2在内存中占: 15+1+4+4+4+4=32(个字节),birthday,struct man char name15; char sex; int age; date birth

6、day; ; man m2,*p=&m2;,m2,结构变量在内存中的存储,结构变量在内存中的大小 =各成员占用内存之和,12,结构变量也允许在定义的同时给出初值,即初始化。 将所有成员的值按顺序逐一列出,并用花括号括起,struct person char name15; char sex; int age; person1=“Fang Min“,F,24;,定义一个结构数组并对其部分元素初始化。,struct person char name15; char sex; int age; s10 =“Fang Min“,F,24, “Fang Hua“,M,35;,结构数组:,13,定义结构类

7、型变量要注意的问题: 不要误认为凡是结构类型都有相同的结构。 (2) 类型与变量是不同的概念。 只能对结构变量中的成员赋值,而不能对结构类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。 (3) 对结构中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。 (4) 成员可以是一个结构变量。,14,(1) 不能将一个结构体变量作为一个整体进行输入和输出. 如: coutperson1;(错误),6.1.3 结构变量的访问,(2)对结构变量成员的访问,1)普通结构变量的访问 结构变量名.成员名,例如:strcpy(m1.name,”Fang Min”); m1.age=24

8、; m1.sex=F; m1.birthday.day=10; m1.birthday.month=8; m1.birthday.year=1975;,如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。 不能写成: m1.month=8,15,2)通过指针对结构变量访问,struct man char name15; char sex; int age; date birthday; ; man m2,*p=&m2;,(*指向结构的指针).成员名,(*p).sex=8;,指向结构的指针-成员名,strcpy(p-name,”Fang Min”); p-age

9、=24; p-sex=F; p-birthday.day=10;,16,【例6.1】某商场周年店庆期间对其会员进行积分换购活动,活动内容为允许每天前五名光临的会员用其积分换购相应的商品,假设每100个积分可以换购5元的商品,编程序求该商场店庆期间每天换购出去的商品金额以及会员换购后的剩余积分值。假设会员将全部可能积分全部进行换购。 分析:可以将会员卡号和积分组合在一起定义一个结构类型,用结构数组来描述若干会员的信息。如, struct card char num10; int score; c10;,17,#include “iostream.h“ #define N 5 void main(

10、 ) struct card char num10; int score; cN; int i,s=0; for(i=0;ici.numci.score; s=s+5*(ci.score/100); /每100分换购5元商品 ci.score=ci.score-100*(ci.score/100); /该会员的剩余积分 cout“扣除积分后:n“; for(i=0;iN;i+) coutci.numtci.scoreendl; cout“积分换购金额=“sendl; ,18,6.1.4 结构数组 1)结构数组的定义 2)结构数组的初始化 3)结构数组的访问,19,不同类型的变量存放到同一段内存

11、单元中。例如,可把一个整型变量、一个字符型变量、一个双精度型变量放在同一个地址开始的内存单元中。,6.2 共用体 6.2.1 共用体的概念,使几个不同的变量共占一段内存结构,称为共用体(Union),20,声明共用体类型的一般形式: union 共用体类型名 成员表列 ; 定义共用体变量的一般形式: 共用体类型名 共用体变量名; 定义共用体类型时同时定义共用体变量: union 共用体类型名 成员表列 共用体变量名;,或者: union 共用体类型名 成员表列 共用体变量名;,21,共用体和结构体的区别: 结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。 共用

12、体变量所占的内存长度等于最长的成员的长度。,22,不能引用共用体变量,而只能引用共用体变量的成员。 例如,下面的引用方式是正确的: a.i (引用共用体变量中的整型成员i) a.ch(引用共用体变量中的字符型成员ch) a.d (引用共用体变量中的双精度型成员d) 不能只引用共用体变量,例如 couta; 是错误的,应该写成couta.i;或couta.ch;等。,6.2.2 对共用体变量的访问方式,23,(1) 使用共用体变量的目的是希望用同一个内存段存放几种不同类型的数据。但请注意: 在每一瞬时只能存放其中一种,而不是同时存放几种。 (2) 能够访问的是共用体变量中最后一次被赋值的成员,在

13、对一个新的成员赋值后原有的成员就失去作用。 (3) 共用体变量的地址和它的各成员的地址都是同一地址。 (4) 不能对共用体变量名赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。,6.2.3 共用体类型数据的特点,24,#include union data char c; int i; double d; ; void main() union data u=a; coutu.cendl; u.i=25;u.d=2.89; coutu.dendl; coutu.iendl; ,输出: a 2.89 1374389535,25,如果一个变量

14、只有几种可能的值,可以定义为枚举类型。 所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。 声明枚举类型用enum开头。 例如 enum weekdaysun,mon,tue,wed,thu,fri,sat; 声明了一个枚举类型weekday,花括号中sun,mon,sat等称为枚举元素或枚举常量。表示这个类型的变量的值只能是以上7个值之一。,6.3 枚举类型,26,声明枚举类型的一般形式: enum 枚举类型名 枚举常量表列; 注意:枚举常量是用户自己定义的标识符。 在声明了枚举类型之后,可以用它来定义变量。 如: weekday workday,w; 这样,workday和w被定义为枚举类型weekday的变量。 根据以上对枚举类型weekday的声明,枚举变量的值只能是sun到sat之一。 例如 workday=mon; w=sun;,27,直接定义枚举变量. enumsun,mon,tue,wed,thu,fri,satw,v; 说明: 对枚举元素按常量处理,故称枚举常量。 sum=0;mon=0; (2) 枚举元素作为常量,它们是有值的,C+编译按定义时的顺序对它们赋值为0,1,2,3,。也可以在声明枚举类型时另行指定枚举元素的值。 workday=mon;coutsum) (4) 一个整数不能直接赋给一个枚举变量。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1