《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt

上传人(卖家):momomo 文档编号:8142409 上传时间:2024-12-09 格式:PPT 页数:73 大小:1.44MB
下载 相关 举报
《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt_第1页
第1页 / 共73页
《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt_第2页
第2页 / 共73页
《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt_第3页
第3页 / 共73页
《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt_第4页
第4页 / 共73页
《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

1、16.1 结构体类型的声明结构体类型的声明 6.2 结构体变量的定义、引用和初始化结构体变量的定义、引用和初始化 6.3 结构体数组结构体数组6.4 结构体与指针结构体与指针6.5 结构体与函数结构体与函数6.6 共用体共用体6.7 枚举类型枚举类型6.8 类型定义语句类型定义语句typedef6.9 小结小结2 信息管理信息管理结构体结构体一种构造数据类型一种构造数据类型 结构体结构体由若干不同类型的数据项组成,由若干不同类型的数据项组成,构成结构体的各个数据项称为构成结构体的各个数据项称为结构体成员。结构体成员。3lstructstruct为关键字,不为关键字,不能省略;能省略;l结构体名

2、结构体名是该结构体是该结构体类型的名称,命名应类型的名称,命名应符合标识符的定义要符合标识符的定义要求。求。成员成员可以是任何类型的变量,包括基本数据类型可以是任何类型的变量,包括基本数据类型和构造数据类型,如整型、浮点型和字符型,数组和和构造数据类型,如整型、浮点型和字符型,数组和指针等,也可以是另一个结构体类型的结构体变量或指针等,也可以是另一个结构体类型的结构体变量或自身结构体的指针,还可以是共用体变量。自身结构体的指针,还可以是共用体变量。struct 结构体名结构体名 数据类型数据类型1 成员名成员名1;数据类型数据类型2 成员名成员名2;数据类型数据类型n 成员名成员名n;4例例6

3、.16.1一个学生的基本信息由学号、姓名、性别、一个学生的基本信息由学号、姓名、性别、成绩组成,声明相应的结构体类型。成绩组成,声明相应的结构体类型。struct student int num;/*学号是整型学号是整型*/char name20;/*姓名是字符数组类型姓名是字符数组类型*/char sex;/*性别是字符型性别是字符型*/float score;/*成绩是实型成绩是实型*/;5日期,声明学生信息结构体类型。日期,声明学生信息结构体类型。struct date int year;int month;int day;6struct student int num;char nam

4、e20;char sex;struct date birthday;/*birthday成员为成员为date 结构体类型结构体类型*/float score;说明:说明:struct date int year,month,day;7int x,y;/*基本数据类型变量基本数据类型变量*/struct point int x,y;/*结构体结构体point中的一个成员中的一个成员*/;8 struct invalid int n;struct invalid iv;9struct invalid int n;struct invalid*iv;10struct student stu1,stu

5、2,*p,stu10;struct 结构体名结构体名 若干成员说明若干成员说明;struct 结构体名结构体名 结构体变量名表结构体变量名表;11#define STU struct studentstruct student int num;char name20;char sex;float score;STU stu1,stu2;12例如:例如:struct student int num;char name20;char sex;float score;stu1,stu2;struct 结构体名结构体名 若干成员说明若干成员说明 结构体变量名表结构体变量名表;13例如:例如:struc

6、t char name20;char sex;int num;float score;stu1,stu2;struct 若干成员说明若干成员说明 结构体变量名表结构体变量名表;14 l结构体变量中的成员可以单独使用,它的结构体变量中的成员可以单独使用,它的作用与地位相当于普通变量。作用与地位相当于普通变量。15 结构体变量结构体变量a的各成员可分别表示为的各成员可分别表示为a.num、a.name、a.sex、a.birthday、a.score struct date int year,month,day;struct student int num;char name20,sex;stru

7、ct date birthday;float score;a;a.birthday.yeara.birthday.montha.birthday.day 结构体变量名结构体变量名.成员名成员名16 printf(%d,%s,%c,%f,stu1);1718 如果初值个数少于结构体成员个数,如果初值个数少于结构体成员个数,则将无初值对应的成员赋以则将无初值对应的成员赋以0 0值。值。如果初值个数多于结构体成员个数,如果初值个数多于结构体成员个数,则编译出错。则编译出错。struct struct 结构体名结构体名 结构体变量结构体变量=初始化列表初始化列表;1920struct student

8、int num;char name20;char sex;float score;stu3;21结构体数组名结构体数组名下标下标.成员名成员名22struct student int num;char*name;char sex;float score;stu3=101,Zhao lei,M,45,102,Sun hui,M,62.5,103,Li fang,F,92.5stu0stu1stu2101Zhao leiM45102Sun huiM62.5103Li fangF92.523 元素的个数可以省略,根据赋初值时结元素的个数可以省略,根据赋初值时结构体常量的个数确定数组元素的个数构体常量

9、的个数确定数组元素的个数 。内层的大括号只是为了阅读程序的方便,内层的大括号只是为了阅读程序的方便,可以省略。可以省略。结构体数组名是结构体数组存储的首地结构体数组名是结构体数组存储的首地址,可以通过数组名利用指针法或下标法访址,可以通过数组名利用指针法或下标法访问数组元素。问数组元素。24#include stdio.hstruct student int num;char name15;int score3;stu=1,David,80,78,92,2,Lily,90,84,89,3,Alice,79,78,96;25 struct 结构体名结构体名*指针变量名指针变量名;26 struc

10、t student*p;struct date int year,month,day;*q;p p是指向是指向structstruct student student结构体变量的指针变量结构体变量的指针变量 结构体名必须是已经定义过的结构体 27struct student stu1,*pstu;pstu=&stu1;结构体指针所指向的结构体变量必须与结构体指针所指向的结构体变量必须与定义时所规定的结构体类型一致。定义时所规定的结构体类型一致。28指针可在定义同时进行初始化指针可在定义同时进行初始化 。方法一方法一:struct student stu1=102,Zhang ping,M,78

11、.5;struct student*pstu=&stu1;等价于:等价于:struct student stu1=102,Zhang ping,M,78.5,*pstu;pstu=&stu1;方法二:方法二:如果不定义结构体变量,可以用分配内存函如果不定义结构体变量,可以用分配内存函数数mallocmalloc()()按下面形式完成对结构体指针变量的初按下面形式完成对结构体指针变量的初始化:始化:struct student*p=(struct student*)malloc(sizeof(struct student);29struct date int year,month,day;d,*

12、p=&d;(*p).year (*p).month (*p).day p-year p-month p-day“-”是指向结构体成员是指向结构体成员运算符,优先级为一级运算符,优先级为一级 p=&d.year(*结构体指针变量结构体指针变量).成员名成员名 或:或:结构体指针变量结构体指针变量-成员名成员名 30pstu-num:得到:得到pstu指向的结构体变量中指向的结构体变量中的成员变量的成员变量num的值。的值。pstu-num+:得到:得到pstu指向的结构体变量指向的结构体变量中的成员变量中的成员变量num的值,先使用,后使的值,先使用,后使num加加1。+pstu-num:得到:

13、得到pstu指向的结构体变量指向的结构体变量中的成员变量中的成员变量num的值,使的值,使num先加先加1,再,再使用。使用。31指向结构体变量的指针使用指向结构体变量的指针使用#include stdio.hstruct student int num;char*name;char sex;float score;stu1=102,Zhang ping,M,78.5,*pstu;32void main()pstu=&stu1;printf(Number=%dnName=%sn,stu1.num,stu1.name);printf(Sex=%cnScore=%fnn,stu1.sex,stu1

14、.score);printf(Number=%dnName=%sn,(*pstu).num,(*pstu).name);printf(Sex=%cnScore=%fnn,(*pstu).sex,(*pstu).score);printf(Number=%dnName=%sn,pstu-num,pstu-name);printf(Sex=%cnScore=%fnn,pstu-sex,pstu-score);33 l定义结构体数组的指针和定义其他数组的指针的方定义结构体数组的指针和定义其他数组的指针的方法是一样的法是一样的 34 struct list int i;char name4;float

15、 w;tab4=1,H,1.008,2,He,4.0026,3,Li,6.941,4,Be,9.01218;2024-12-9 35main()struct list *p,tab4;p r i n t f(N o t N a m e t A t o m i c Weightn);for(p=tab;pi,p-name,p-w);ppppp1 H 1.0082 He 4.00263 Li 6.9414 Be 9.0121836#include stdio.h struct student int num;char*name;char sex;float score;stu3=101,Zhao

16、lei,M,45,102,Sun hui,M,62.5,103,Li fang,F,92.5;373839 struct code int i;char c;a=100,A,200,B,300,C,400,D;40p101301101B200D30030141形参形参定义为定义为结构体变量结构体变量。函数调用时,。函数调用时,可可将主调函数的将主调函数的结构体类型结构体类型实参实参传递给被调函数传递给被调函数的的形参形参。如果如果将函数定义为将函数定义为结构体类型函数结构体类型函数,可,可利用利用returnreturn语句将一个结构体数据结果返回到主调函语句将一个结构体数据结果返回到主调函数

17、数中中。42形参形参定义为定义为指向结构体类型的指向结构体类型的指针指针变量变量,可可将将主调函数的主调函数的结构体指针结构体指针传递给被调函数的传递给被调函数的形参形参变变量量,通过指针形参的指向域的扩展,通过指针形参的指向域的扩展,操作操作主调函主调函数中数中结构体变量及其成员结构体变量及其成员。l方法三:利用方法三:利用全局结构体变量全局结构体变量传递结传递结43【例【例6.7】在在student结构体类型中增加一个成员结构体类型中增加一个成员rank,如果成绩如果成绩score大于或等于大于或等于60,rank的值为的值为“SUCCESS”,否则,否则rank的值为的值为“FAIL”s

18、truct student int num;char*name;char sex;float score;char*rank;4445 46#include stdio.hstruct student int num;char*name;char sex;float score;47 struct student fun(struct student*pstud,int n)struct student*p,*p_max,*p_end;int j;float max=0;p=pstud;p_max=p;p_end=p+n;for(;pscoremax)max=p-score;p_max=p;r

19、eturn(*p_max);48 49共享一段公共存储空间共享一段公共存储空间。共用体类型变量共用体类型变量所占内存空间所占内存空间不是各个成员所需不是各个成员所需存储空间字节数的总和,而是共用体成员中存储空间存储空间字节数的总和,而是共用体成员中存储空间最大的成员所要求的字节数最大的成员所要求的字节数。由于共享的特性,由于共享的特性,只有最新存储的只有最新存储的数据是有效的。数据是有效的。50lunionunion为关键字;为关键字;l共用体名共用体名是用户定义是用户定义的类型标识。的类型标识。l 中是组成该共用体中是组成该共用体的成员。成员的的成员。成员的数据数据类型类型可以是可以是C C

20、语言所允语言所允许的任何数据类型。许的任何数据类型。union union 共用体名共用体名 数据类型数据类型1 成员名成员名1;数据类型数据类型2 成员名成员名2;数据类型数据类型n 成员名成员名n;51例如:例如:union data int stud;char teach 10;声明了一个声明了一个union dataunion data共用体类型,共用共用体类型,共用体类型定义不分配内存空间,只是说明此类型体类型定义不分配内存空间,只是说明此类型数据的组成情况。数据的组成情况。521、先定义共用体类型,再定义共用体类型变量、先定义共用体类型,再定义共用体类型变量union 共用体名共用

21、体名 变量名表变量名表;53例如:例如:union union 共用体名共用体名 变量名表变量名表;54例如:例如:unionunion变量名表变量名表;55例如:例如:用共用体变量名的引用形式:用共用体变量名的引用形式:用共用体指针变量的引用形式:用共用体指针变量的引用形式:共用体变量名共用体变量名.成员名成员名指向共用体变量的指针名指向共用体变量的指针名-成员名成员名56 共用体类型变量在定义时只能对第一共用体类型变量在定义时只能对第一个成员进行赋初值。个成员进行赋初值。由于第一个成员是字符型,用一个字由于第一个成员是字符型,用一个字节,所以对于初值节,所以对于初值0 0 x9741x97

22、41仅能接受仅能接受0 0 x41x41,初值的高字节被截去。初值的高字节被截去。1.A 41A 412.a 61a 61对对u2u2成员的引成员的引用是无意义的用是无意义的57(2)(2)不允许对共用体变量名作赋值或其他操作,也不不允许对共用体变量名作赋值或其他操作,也不能企图引用变量名来得到一个值。能企图引用变量名来得到一个值。(3)(3)共用体变量的地址和它的各个成员变量的地址共用体变量的地址和它的各个成员变量的地址相同相同,都是同一都是同一个地址。个地址。(4)(4)一个共用体型的变量可以用来存放几种不同类一个共用体型的变量可以用来存放几种不同类型的成员变量,但无法同时存放几种变量型的

23、成员变量,但无法同时存放几种变量 ,即每一,即每一时刻只有一个变量在起作用。时刻只有一个变量在起作用。58(5)(5)共用体变量不能作函数参数,函数的返回值也共用体变量不能作函数参数,函数的返回值也不能是共用体类型不能是共用体类型 。(6)(6)共用体变量可以出现在结构体类型的定义中,共用体变量可以出现在结构体类型的定义中,也可以定义共用体数组。另外,结构体变量也可以也可以定义共用体数组。另外,结构体变量也可以出现在共用体类型的定义中。出现在共用体类型的定义中。59 所谓所谓“枚举枚举”,是指将变量的值一一列举出来。,是指将变量的值一一列举出来。或者说,枚举是若干个具有名称的常量的有序集合。或

24、者说,枚举是若干个具有名称的常量的有序集合。枚举类型给出一个数目固定的若干有序的名称表,枚举类型给出一个数目固定的若干有序的名称表,称为称为枚举表枚举表。枚举表中的每个数据项称为。枚举表中的每个数据项称为枚举符枚举符。lenumenumenum 枚举名枚举名 枚举常量取值表枚举常量取值表;60 enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat;enum color1 blue,green,red;enum flag false,true;61例如例如:enum flag fg;enum color1 c1;enum color2 blank,brown,yell

25、ow,white c2;enum lightblue,lightgreen,lightred c3;enum 枚举名枚举名 枚举变量名表枚举变量名表;enum 枚举名枚举名 枚举常量取值表枚举常量取值表 枚举变量表枚举变量表;enum 枚举常量取值表枚举常量取值表 枚举变量表枚举变量表;62enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat;隐式定义:隐式定义:0123456 在枚举类型中,每个在枚举类型中,每个枚举常量枚举常量都代表一个整型都代表一个整型值。在定义枚举类型的同时可隐式或显式地值。在定义枚举类型的同时可隐式或显式地定义枚定义枚举常量所代表的值举常量

26、所代表的值。63例如:例如:显式定义:显式定义:在定义类型的同时指定枚举常量的值,其中如在定义类型的同时指定枚举常量的值,其中如有未指定值的枚举常量,则根据前面的枚举常量的有未指定值的枚举常量,则根据前面的枚举常量的值依次递增值依次递增1 1。234564(1)赋值运算赋值运算 枚举变量的值只能取枚举类型的枚举表中的枚举符,枚举变量的值只能取枚举类型的枚举表中的枚举符,例如:例如:enum day sun,mon,tue,wed,thu,fri,sat d1,d2;d1=sat;d2=d1;(2)枚举符可以进行加(减)整型数运算)枚举符可以进行加(减)整型数运算 例如:例如:d1=sun+2;

27、d2=sat-3;(3)枚举元素还可以用来作判断比较)枚举元素还可以用来作判断比较 if(todaytue);65(4)枚举变量可以作循环变量)枚举变量可以作循环变量 例如:例如:for(today=sun;today=sat;today+)printf(%d,today);(5)枚举变量的输入输出操作)枚举变量的输入输出操作 枚举变量只能通过赋值获得值,而不能通过枚举变量只能通过赋值获得值,而不能通过 scanfscanf函数从键盘输入获值。函数从键盘输入获值。枚举变量可以通过枚举变量可以通过 printfprintf函数输出其枚举符的函数输出其枚举符的值,即整型数值,但不能直接输出其标识符

28、。值,即整型数值,但不能直接输出其标识符。(6)枚举变量的作用域与结构体变量以及普通变量)枚举变量的作用域与结构体变量以及普通变量定义的作用域类似。定义的作用域类似。66【例例6.106.10】顺序输出顺序输出5 5种颜色名。种颜色名。#include void main()enum color red,yellow,blue,white,black;enum color c;for(c=red;c=black;c+)switch(c)case red:printf(red);break;case yellow:printf(yellow);break;case blue:printf(blu

29、e);break;case white:printf(white);break;case black:printf(black);break;67ltypedeftypedef是关键字;是关键字;l类型名类型名可以是基本类型、构造类型、指针类可以是基本类型、构造类型、指针类型或自定义类型名;型或自定义类型名;l新类型名新类型名是自定义的类型名。是自定义的类型名。typedef 原类型名原类型名 新类型名新类型名68/*定义定义COUNTER为整型类型名为整型类型名*/*定义定义DATE为为struct date结构体类型名结构体类型名*/新类型名与旧类型名作用相同,并且可同时使用。新类型名与旧

30、类型名作用相同,并且可同时使用。与与 等价。等价。与与 等价。等价。以以typedeftypedef开头,加开头,加上变量定义的形式,上变量定义的形式,并用新类型名替代变并用新类型名替代变量名。量名。69 为基本类型命名为基本类型命名例如:例如:/*相当于相当于float x,y;*/为数组类型命名为数组类型命名例如:例如:/*相当于相当于char c80,d480;*/70 为指针类型命名为指针类型命名例如:例如:/*相当于相当于int *pp;*/*相当于相当于int(*funp)();*/71 为结构体、共用体类型命名为结构体、共用体类型命名例如:例如:/*相当于相当于struct no

31、de*p;*/struct CHNODE *p;72(1 1)使用类型定义会给所定义的变量带来)使用类型定义会给所定义的变量带来一些有用的信息。一些有用的信息。(2 2)使用类型定义可以使得书写简单,通)使用类型定义可以使得书写简单,通过用类型定义将一个复杂类型定义一个简过用类型定义将一个复杂类型定义一个简单形式,给书写上带来方便。单形式,给书写上带来方便。(3 3)使用类型定义语句定义的新类型)使用类型定义语句定义的新类型 ,再用来定义变量时,系统会进行类型检查再用来定义变量时,系统会进行类型检查,这样可以增加数据的安全性。,这样可以增加数据的安全性。73 本章学习了本章学习了C C语言的构

32、造类型语言的构造类型结构结构体、共用体及枚举类型,以及用体、共用体及枚举类型,以及用typedeftypedef自自定义类型。介绍了结构体、结构体数组和定义类型。介绍了结构体、结构体数组和共用体的说明形式、初始化及成员的引用共用体的说明形式、初始化及成员的引用方法;结构体或指向结构体的指针为参数方法;结构体或指向结构体的指针为参数或返回值的函数的定义形式和调用方法;或返回值的函数的定义形式和调用方法;typedeftypedef说明的形式、说明的形式、typedeftypedef定义类型名定义类型名的用法。其中,构造类型是由基本类型导的用法。其中,构造类型是由基本类型导出的类型。基本类型的数据有常量、变量出的类型。基本类型的数据有常量、变量之分。而构造类型没有常量,只有变量。之分。而构造类型没有常量,只有变量。

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

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《CC++语言程序设计》课件第6章 结构体、共用体与枚举.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|