收藏 分销(赏)

C结构体共同体和枚举.pptx

上传人:丰**** 文档编号:4858174 上传时间:2024-10-15 格式:PPTX 页数:29 大小:141.53KB
下载 相关 举报
C结构体共同体和枚举.pptx_第1页
第1页 / 共29页
C结构体共同体和枚举.pptx_第2页
第2页 / 共29页
C结构体共同体和枚举.pptx_第3页
第3页 / 共29页
C结构体共同体和枚举.pptx_第4页
第4页 / 共29页
C结构体共同体和枚举.pptx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、2024/10/15周二VisualC+程序设计1第 章 结构体、共同体和枚举类型2024/10/15周二VisualC+程序设计2结构体结构体 2024/10/15周二VisualC+程序设计3 数组中的每一个元素属于同一种数据类型,利用数组处理大量的同类型同类型 数据是很方便的。但是在实际应用中,常常需要把不同类型而关系又非常密切的数据组织在一起,形成一个整体,以便于统一管理。一种称为结构体的数据类型,可以用来描述这种类型的数据集。结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。结构通常用来定义存储在文件中的记录。2024/10/15周二Vi

2、sualC+程序设计4一:结构的定义 结构是一种派生类数据类型,在使用结构变量之前须先对结构进行定义。定义结构的一般格式为:structstruct 结构名 类型 变量名;类型 变量名;.;结构名是结构的标识符不是变量名,花括号内的变量称之为结构的成员,类型可以是我们以前所学到的任意类型,甚至可以是结构但不能是结构本身,每个成员的类型可以不一样。注意:每一个结构定义必须以分号结束!2024/10/15周二VisualC+程序设计5 由于定义结构类型只是定义了一种数据类型,因此,当编译器编译结构体的定义时,并不为结构体中的成员分配任何内存空间,从而在定义结构体的成员时,不能指定成员的存储类型为a

3、uto、register、extern,但可以指定结构体成员的存储类型为static,其特点和作用将在以后介绍。2024/10/15周二VisualC+程序设计6二:结构变量的定义 声明结构变量与声明其它类型变量类似,格式为:struct 结构名 结构变量名;如:struct student int No;char name8;float score;;student stu1,stu2,stu30;也可在定义结构的同时定义结构变量,如:struct student int No;char name8;float score;stu1,stu2,stu30;2024/10/15周二Visual

4、C+程序设计7 与基本数据类型类似,在定义结构体类型的变量时,也可对该变量进行初始化,其方法与对数组的初始化方法类似,即采用用花括号括起来的初始值表。注意,初始值表中的数据类型必须与结构体中对应元素的类型一致(兼容的除外),否则会产生编译错误。另外,初始值表中的数据的个数不能大于结构体中元素的个数。在定义结构体类型的变量时,也可以指定变量的存储类型。2024/10/15周二VisualC+程序设计8三:结构变量的初始化 struct student int No;char name8;float score;;student stu1=9601,”张三“,96.5;student stu2=9

5、601,”张三“,96.5,9602,”李四“,80;或者 struct student int No;char name8;float score;stu2=9601,”张三“,96.5,9602,”李四“,80;2024/10/15周二VisualC+程序设计9 对于结构体类型的变量,在编译过程中,编译系统将为这些变量分配相应的内存空间,所分配的空间大小原则上为结构体中所有成员所占空间的总和。结构体变量也存在作用域的问题,其作用域与一般变量的作用域相同。2024/10/15周二VisualC+程序设计10 结构体类型变量的使用结构体类型变量的使用 对结构体变量的使用一般是通过对其成员的引用

6、实现的。使用结构体变量的成员的一般格式为:.其中,“是结构体成员运算符 2024/10/15周二VisualC+程序设计11structstudentintNo;charname8;floatscore;;四:结构成员的访问 student stu1;cinstu1No;coutstu1name;stu1score=89.5;2024/10/15周二VisualC+程序设计12 结构体类型变量本身也可参与一些运算:1)同类型的结构体变量可以相互赋值。2)结构体类型变量不能直接进行输入输出。3)结构体类型变量可以作为函数的参数,函数的返回值也可以是结构体类型。当函数的形参与实参为结构体类型的变量

7、时,其结合方式属于值传递方式。【例7.2】2024/10/15周二VisualC+程序设计13结构体数组结构体数组 定义结构体数组的方法与定义结构体类型变量的方法类同,只是在定义时增加维数的说明,也有三种方法。在说明结构体数组时,可对它进行初始化,其方法与数组类似,有两种方法:第一种方法是将数组的每一个元素的成员的值用花括号括起来,再将数组的全部元素值用一对花括号括起来;第二种方法是在花括号内依次列出各个元素的成员值。【例7.3】2024/10/15周二VisualC+程序设计14结构体类型的静态成员结构体类型的静态成员 在定义结构体类型时,可以把某一个成员的存储类型声明为静态的,这样,在这种

8、结构体类型的所有变量中,编译系统只为该静态成员分配一个存储空间,即这种结构体类型的所有变量的静态成员的值都相同,只要改变了其中一个变量的静态成员的值,其它变量的该成员的值也随之改变。【例7.5】2024/10/15周二VisualC+程序设计15 编译系统一开始就为结构体的静态类型成员分配内存空间,并进行初始化。但在结构体中说明的静态成员属于引用性说明,在这里并不会为其分配内存空间,因此必须在文件作用域的某一个地方进行定义性说明定义性说明,而且仅能说明一次。定义性说明的一般格式为::;其中与该静态成员的类型一致,符号“:”称为作用域运算符作用域运算符,它表示成员与结构的一种隶属关系。静态成员可

9、以脱离具体结构体变量而存取,即可以利用结构体名和作用域运算符表示该成员。在用初始值表对结构体变量初始化时,不再对静态成员置初值,即初始值表将跳过静态成员。2024/10/15周二VisualC+程序设计16*位域位域 如将一个字或一个字节以二进位为单位划分为若干个区域,则每一个区域称为一个位域位域。位域通常用于表示较小范围内的数。定义位域的一般格式为:struct unsigned:;unsigned:;位域名可以省略。位域名后的,可为0或正整数,表示相应的位域所占用的二进位数。2024/10/15周二VisualC+程序设计17 位域类型变量的使用方法与结构体类型变量的使用方法完全相同。(1

10、)在一个结构体中定义的任一个位域都必须在同一个存储单元中(4个字节共32位)。如果本存储单元中剩余的二进位不够定义一个位域成员时,则该存储单元的剩余的二进位不用,而从下一个存储单元开始。(2)可以定义一个无名的位域成员,表示跳过若干个二进位。(3)可以定义位数为0的位域成员,表示其下一个位域成员从下一个存储单元开始,此时该位域的位域名必须为空。2024/10/15周二VisualC+程序设计18 (4)一个位域成员的长度不能大于一个存储单元的长度(32位)。(5)位域变量的使用方法与结构体变量的使用方法完全一样。(6)同一个存储空间中位域的分配方向随机器而异。(7)当要存入一个成员中的数超过它

11、所能表示的范围时,超过的高位将被去掉。(8)位域的优点是可以节省存储空间,但在存取位域变量时,花费的时间较多。2024/10/15周二VisualC+程序设计19 共同体共同体 与结构一样,共同体共同体也是一种派生类数据类型,但是其成员共享同一存储空间,即成员公用一个内存位置,可在不同的时间保存不同的数据类型和不同长度的变量。2024/10/15周二VisualC+程序设计20 定义共同体类型的一般格式为:union ;共同体类型变量的说明方法与结构体类型变量的说明方法类似,也有三种方法。一般情况下我们把结构和共同体定义在程序开头,然后在函数内定义结构变量和共同体变量。2024/10/15周二

12、VisualC+程序设计21 由于共同体中的成员占用同一个内存空间,该存储空间的大小为占用存储空间最大的成员所占用的字节数。另外,在使用一个共同体类型变量的成员之前必须先指定该成员的值。共用体成员的引用 同结构一样,可使用成员运算符“”。但值得注意的是,在同一个时候只能引用一个成员,引用当前成员,其它成员的值会被覆盖。只能对共同体变量的第一个成员初始化,不能对整体初始化。2024/10/15周二VisualC+程序设计22【例】以下程序的运行结果是什么?union u_type int i;char ch6;/A long s;struct st_type u_type u;float sco

13、re3;voidmain()coutsizeof(struct st_type)endl;20考虑将A行改为:char ch8 或 char ch10 或 char ch122024/10/15周二VisualC+程序设计23枚举类型枚举类型(enum)2024/10/15周二VisualC+程序设计24 枚举是一种自定义类型,一个用标示符表示的整型常数的集合,枚举在日常生活中很常见。例如表示星期的 SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,就是一个枚举。枚举的说明与结构和共同体相似,其形式为:enum 枚举名 标识符=整

14、型常数,标识符=整型常数,.标识符=整型常数,枚举变量;如果枚举没有初始化,即省掉=整型常数时,则从第一个标识符开始,顺次赋给标识符0,1,2,.。但当枚举中的某个成员赋值后,其后的成员按依次加1的规则确定其值。2024/10/15周二VisualC+程序设计25 例如下列枚举说明后,x1,x2,x3,x4的值分别为0,1,2,3。enum stringx1,x2,x3,x4 x;当定义改变成:enum string x1,x2=0,x3=50,x4 x;则x1=0,x2=0,x3=50,x4=51 2024/10/15周二VisualC+程序设计26注意:枚举中每个成员(标识符)结束符是“,

15、”,不是“;”,最后一个成员可省略“,”。初始化时可以赋负数,以后的标识符仍依次加1。枚举元素可以作为整型常量使用,可以直接输出。如:enum colorRed,Green,Blue;coutGreenendl;/此时结果为1可以用枚举类型说明枚举类型变量,而且也有与结构体类型类似的三种说明方法。在说明枚举类型变量时,也可对它进行初始化,此时可将某一个枚举元素作为它的初始值。2024/10/15周二VisualC+程序设计27 通常将某个枚举元素赋给枚举类型的变量,但也可将相应的整数赋给枚举类型的变量,不过此时一定要进行强制类型转换。不过,可以将枚举变量或枚举元素直接赋值给整型变量。如:enu

16、m colorRed=5,Green,Blue;.color c=Blue;此时,枚举变量c实际上是7,即 coutcendl;的结果为7而不是Blue!但:color c=7;r 应该:color c=(color)(7);a 可以:int a=c;或 int a=Blue;a2024/10/15周二VisualC+程序设计28例:定义一个描述三种颜色的枚举类型(Red,Green,Blue),输出这三种颜色的全部排列组合。#include enum colorRed,Green,Blue;char color6=Red,Green,Blue;void main()int i,j,k;for(i=Red;i=Blue;i+)for(j=Red;j=Blue;j+)for(k=Red;k=Blue;k+)if(i!=j&j!=k&k!=i)coutcolorit colorjtcolorkendl;2024/10/15周二VisualC+程序设计29课后练习:试卷汇编 P5T27 P6T29

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服