第11章 结构体 (2).ppt

上传人:hyn****60 文档编号:70708894 上传时间:2023-01-25 格式:PPT 页数:35 大小:98.50KB
返回 下载 相关 举报
第11章 结构体 (2).ppt_第1页
第1页 / 共35页
第11章 结构体 (2).ppt_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《第11章 结构体 (2).ppt》由会员分享,可在线阅读,更多相关《第11章 结构体 (2).ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 C C语言程序设计语言程序设计第第14章章 结构与链表结构与链表为将不同数据类型、但相互关联的一组数据,组合为将不同数据类型、但相互关联的一组数据,组合成一个有机整体使用,成一个有机整体使用,C语言提供一种称为语言提供一种称为“结构结构”的的数据结构。数据结构。14.1 结构类型与结构变量的定义结构类型与结构变量的定义14.2 结构变量的引用与初始化结构变量的引用与初始化14.3 结构数组结构数组14.4 指向结构类型数据的指针指向结构类型数据的指针14.5 链表处理链表处理结构指针的应用结构指针的应用14.6 共用型和枚举型共用型和枚举型14.7 定义已有类型的别名定义已有类型的别名Ret

2、urn C C语言程序设计语言程序设计14.1 14.1 结构类型与结构变量的定义结构类型与结构变量的定义结构类型与结构变量的定义结构类型与结构变量的定义C语言中的结构类型,相当于其它高级语言中的语言中的结构类型,相当于其它高级语言中的“记录记录”类型。类型。10.1.1 结构类型定义struct 结构类型名结构类型名 /*struct是结构类型关键字是结构类型关键字*/数据类型数据类型 数据项数据项1;数据类型数据类型 数据项数据项2;数据类型数据类型 数据项数据项;/*此行分号不能少!此行分号不能少!*/案例10.1 定义一个反映学生基本情况的结构类型,用以存储学生的相关定义一个反映学生基

3、本情况的结构类型,用以存储学生的相关信息。信息。/*案例代码文件名:案例代码文件名:AL10_1.C。*/*功能:定义一个反映学生基本情况的结构类型功能:定义一个反映学生基本情况的结构类型*/C C语言程序设计语言程序设计struct date /*日期结构类型:由年、月、日三项组成日期结构类型:由年、月、日三项组成*/int year;int month;int day;struct std_info/*学学生生信信息息结结构构类类型型:由由学学号号、姓姓名名、性性别别和和生生日日共共4项项组成组成*/char no7;char name9;char sex3;struct date bir

4、thday;struct score/*成绩结构类型:由学号和三门成绩共成绩结构类型:由学号和三门成绩共4项组成项组成*/char no7;int score1;int score2;int score3;C C语言程序设计语言程序设计(1)“结构类型名结构类型名”和和“数据项数据项”的命名规则,与变量名相同。的命名规则,与变量名相同。(2)数数据据类类型型相相同同的的数数据据项项,既既可可逐逐个个、逐逐行行分分别别定定义义,也也可可合并成一行定义。合并成一行定义。例如,本案例代码中的日期结构类型,也可改为如下形式:例如,本案例代码中的日期结构类型,也可改为如下形式:struct date i

5、nt year,month,day;(3)结结构构类类型型中中的的数数据据项项,既既可可以以是是基基本本数数据据类类型型,也也允允许许是是另一个已经定义的结构类型。另一个已经定义的结构类型。例例 如如,本本 案案 例例 代代 码码 中中 的的 结结 构构 类类 型型 std_info,其其 数数 据据 项项“birthday”就是一个已经定义的日期结构类型就是一个已经定义的日期结构类型date。(4)本书将个数据项称为结构类型的个成员(或分量)。本书将个数据项称为结构类型的个成员(或分量)。C C语言程序设计语言程序设计10.1.2 结构变量定义用用户户自自己己定定义义的的结结构构类类型型,与

6、与系系统统定定义义的的标标准准类类型型(int、char等)一样,可用来定义结构变量的类型。等)一样,可用来定义结构变量的类型。1.定义结构变量的方法,可概括为两种:定义结构变量的方法,可概括为两种:(1)间接定义法先定义结构类型、再定义结构变量先定义结构类型、再定义结构变量例例如如,利利用用案例10.1中中定定义义的的学学生生信信息息结结构构类类型型std_info,定定义了一个相应的结构变量义了一个相应的结构变量student:struct std_info student;结结构构变变量量student:拥拥有有结结构构类类型型的的全全部部成成员员,其其中中birthday成成员是一个日

7、期结构类型,它又由员是一个日期结构类型,它又由3个成员构成。个成员构成。注意:使使用用间间接接定定义义法法定定义义结结构构变变量量时时,必必须须同同时时指指定定结结构构类类型名。型名。C C语言程序设计语言程序设计(2)直接定义法在定义结构类型的同时,定义结构变量在定义结构类型的同时,定义结构变量例如,结构变量例如,结构变量student的定义可以改为如下形式:的定义可以改为如下形式:struct std_info student;同时定义结构类型及其结构变量的一般格式如下:同时定义结构类型及其结构变量的一般格式如下:struct 结构类型名 结构变量表;2.说明说明(1)结结构构类类型型与与

8、结结构构变变量量是是两两个个不不同同的的概概念念,其其区区别别如如同同int类类型型与与int型变量的区别一样。型变量的区别一样。(2)结结构构类类型型中中的的成成员员名名,可可以以与与程程序序中中的的变变量量同同名名,它它们们代代表表不不同同的对象,互不干扰。的对象,互不干扰。Return C C语言程序设计语言程序设计14.2 14.2 结构变量的引用与初始化结构变量的引用与初始化结构变量的引用与初始化结构变量的引用与初始化 案例14.2 利用利用案例10.1中定义的结构类型中定义的结构类型struct std_info,定义定义一个结构变量一个结构变量student,用于存储和显示一个学

9、生的基本情况。用于存储和显示一个学生的基本情况。/*案例代码文件名:案例代码文件名:AL10_2.C*/#includestruct.h/*定义并初始化一个外部结构变量定义并初始化一个外部结构变量student*/struct std_info student=000102,张三张三,男男,1980,9,20;main()printf(No:%sn,student.no);printf(Name:%sn,student.name);printf(Sex:%sn,student.sex);printf(Birthday:%d-%d-%dn,student.birthday.year,studen

10、t.birthday.month,student.birthday.day);程序演示 C C语言程序设计语言程序设计程序运行结果:程序运行结果:No:000102Name:张三张三Sex:男男Birthday:1980-9-20 1.结构变量的引用规则对对于于结结构构变变量量,要要通通过过成成员员运运算算符符“.”,逐逐个个访访问问其其成成员员,且且访问的格式为:访问的格式为:结构变量.成员 /*其中的其中的“.”是成员运算符是成员运算符*/例例如如,案案例例中中的的student.no,引引用用结结构构变变量量student中中的的no成成员员;student.name引用结构变量引用结构

11、变量student中的中的name成员,等等。成员,等等。C C语言程序设计语言程序设计如如果果某某成成员员本本身身又又是是一一个个结结构构类类型型,则则只只能能通通过过多多级级的的分分量量运运算,对最低一级的成员进行引用。算,对最低一级的成员进行引用。此时的引用格式扩展为:此时的引用格式扩展为:结构变量.成员.子成员.最低1级子成员例如,引用结构变量例如,引用结构变量student中的中的birthday成员的格式分别为:成员的格式分别为:student.birthday.yearstudent.birthday.monthstudent.birthday.day(1)对对最最低低一一级级成

12、成员员,可可像像同同类类型型的的普普通通变变量量一一样样,进进行行相相应应的各种运算。的各种运算。(2)既可引用结构变量成员的地址,也可引用结构变量的地址。)既可引用结构变量成员的地址,也可引用结构变量的地址。C C语言程序设计语言程序设计例如,例如,&student.name,&student。2.结构变量的初始化结构变量的初始化结构变量初始化的格式,与一维数组相似:结构变量初始化的格式,与一维数组相似:结构变量=初值表不不同同的的是是:如如果果某某成成员员本本身身又又是是结结构构类类型型,则则该该成成员员的的初初值值为为一一个初值表。个初值表。例例 如如,案 例 10.2中中 的的 stu

13、dent=000102,张张 三三,男男,1980,9,20。注意:初初值值的的数数据据类类型型,应应与与结结构构变变量量中中相相应应成成员员所所要要求求的的一一致致,否则会出错。否则会出错。Return C C语言程序设计语言程序设计10.3 10.3 结构数组结构数组结构数组结构数组结构数组的每一个元素,都是结构类型数据,均包含结构类型结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。的所有成员。案例10.3 利用利用案例10.1中定义的结构类型中定义的结构类型struct std_info,定义一个结构数组定义一个结构数组student,用于存储和显示三个学生的基本情况。

14、用于存储和显示三个学生的基本情况。/*案例代码文件名:案例代码文件名:AL10_3.C*/#includestruct.h/*定义并初始化一个外部结构数组定义并初始化一个外部结构数组student3*/struct std_info student3=“000102”,“张三张三”,“男男”,1980,9,20,“000105”,“李四李四”,“男男”,1980,8,15,“000112”,“王五王五”,“女女”,1980,3,10 ;C C语言程序设计语言程序设计/*主函数主函数main()*/main()int i;/*打印表头打印表头:表示表示1个空格字符个空格字符*/printf(No

15、.NameSexBirthdayn);/*输出三个学生的基本情况输出三个学生的基本情况*/for(i=0;ino);printf(Name:%sn,p_std-name);printf(Sex:%sn,p_std-sex);printf(Birthday:%d-%d-%dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示 C C语言程序设计语言程序设计通通过过指指向向结结构构变变量量的的指指针针来来访访问问结结构构变变量量的的成成员员,与与直直接接使使用用结结构构变变量量的的效效果果一一样样。一一般般地地说说,

16、如如果果指指针针变变量量pointer已已指指向向结结构构变量变量var,则以下三种形式等价:则以下三种形式等价:(1)var.成员成员(2)pointer-成员成员(3)(*pointer).成员成员 /*“*pointer”外面的括号不能省!外面的括号不能省!*/注意:在在格格式式(1)中中,分分量量运运算算符符左左侧侧的的运运算算对对象象,只只能能是是结结构构变变量量,;而而在在格格式式(2)中中,指指向向运运算算符符左左侧侧的的运运算算对对象象,只只能能是是指向结构变量(或结构数组)的指针变量,否则都出错。指向结构变量(或结构数组)的指针变量,否则都出错。思考题:如如果果要要求求从从键

17、键盘盘上上输输入入结结构构变变量量student的的各各成成员员数数据据,如何修改程序?如何修改程序?C C语言程序设计语言程序设计10.4.2 指向结构数组的指针案例10.5 使用指向结构数组的指针来访问结构数组。使用指向结构数组的指针来访问结构数组。/*案例代码文件名:案例代码文件名:AL10_5.C*/#includestruct.h/*定义并初始化一个外部结构数组定义并初始化一个外部结构数组student*/struct std_info student3=000102,张三张三,男男,1980,5,20,000105,李四李四,男男,1980,8,15,“000112”,“王五王五”

18、,“女女”,1980,3,10;main()struct std_info *p_std=student;int i=0;/*打印表头打印表头*/printf(No.NameSexBirthdayn);C C语言程序设计语言程序设计/*输出结构数组内容输出结构数组内容*/for(;ino,p_std-name,p_std-sex);printf(%4d-%2d-%2dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示如如果果指指针针变变量量p已已指指向向某某结结构构数数组组,则则p+1指指向向结结构构数数组组的

19、的下下一一个元素,而不是当前元素的下一个成员。个元素,而不是当前元素的下一个成员。另另外外,如如果果指指针针变变量量p已已经经指指向向一一个个结结构构变变量量(或或结结构构数数组组),就不能再使之指向结构变量(或结构数组元素)的某一成员。就不能再使之指向结构变量(或结构数组元素)的某一成员。C C语言程序设计语言程序设计10.4.3 指向结构数据的指针作函数参数案例10.6 用用函函数数调调用用方方式式,改改写写案例10.5:编编写写一一个个专专门门的的显显示示函函数数display(),通过主函数调用来实现显示。通过主函数调用来实现显示。/*案例代码文件名:案例代码文件名:AL10_6.C*

20、/#includestruct.h/*定义并初始化一个外部结构数组定义并初始化一个外部结构数组student*/struct std_info student3=000102,张三张三,男男,1980,5,20,000105,李四李四,男男,1980,8,15,“000112”,“王五王五”,“女女”,1980,3,10;/*主函数主函数main()*/main()void display();/*函数说明函数说明*/int i=0;/*打印表头打印表头*/printf(No.NameSexBirthdayn);C C语言程序设计语言程序设计 /*打印内容打印内容*/for(;ino,p_st

21、d-name,p_std-sex);printf(%4d-%2d-%2dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示Return C C语言程序设计语言程序设计14.5 14.5 链表处理链表处理链表处理链表处理结构指针的应用结构指针的应用结构指针的应用结构指针的应用14.5.1 概述1链表结构链表结构链链表表作作为为一一种种常常用用的的、能能够够实实现现动动态态存存储储分分配配的的数数据据结结构构,在在数数据据结结构构课课程程中中有有详详细细介介绍绍。为为方方便便没没有有学学过过数数据据结结构构的的读读

22、者者,本书从应用角度,对链表作一简单介绍。图本书从应用角度,对链表作一简单介绍。图10-1所示为单链表。所示为单链表。(1)头指针变量头指针变量head指向链表的首结点。指向链表的首结点。(2)每个结点由)每个结点由2个域组成:个域组成:1)数据域)数据域存储结点本身的信息。存储结点本身的信息。2)指针域)指针域指向后继结点的指针。指向后继结点的指针。(3)尾结点的指针域置为)尾结点的指针域置为“NULL(空)空)”,作为链表结束的标志。,作为链表结束的标志。C C语言程序设计语言程序设计2对链表的基本操作对链表的基本操作对对链链表表的的基基本本操操作作有有:创创建建、检检索索(查查找找)、插

23、插入入、删删除除和和修修改改等。等。(1)创创建建链链表表是是指指,从从无无到到有有地地建建立立起起一一个个链链表表,即即往往空空链链表表中依次插入若干结点,并保持结点之间的前驱和后继关系。中依次插入若干结点,并保持结点之间的前驱和后继关系。(2)检索操作是指,按给定的结点索引号或检索条件,查找某)检索操作是指,按给定的结点索引号或检索条件,查找某个结点。如果找到指定的结点,则称为检索成功;否则,称为检索个结点。如果找到指定的结点,则称为检索成功;否则,称为检索失败。失败。(3)插插入入操操作作是是指指,在在结结点点ki-1与与ki之之间间插插入入一一个个新新的的结结点点k,使线性表的长度增使

24、线性表的长度增1,且,且ki-1与与ki的逻辑关系发生如下变化:的逻辑关系发生如下变化:插插入入前前,ki-1是是ki的的前前驱驱,ki是是ki-1的的后后继继;插插入入后后,新新插插入入的的结结点点k成为成为ki-1的后继、的后继、ki的前驱,如图的前驱,如图10-2所示。所示。(4)删删除除操操作作是是指指,删删除除结结点点ki,使使线线性性表表的的长长度度减减1,且且ki-1、ki和和ki+1之间的逻辑关系发生如下变化:之间的逻辑关系发生如下变化:C C语言程序设计语言程序设计删除前,删除前,ki是是ki+1的前驱、的前驱、ki-1的后继;删除后,的后继;删除后,ki-1成为成为ki+1

25、的前的前驱,驱,ki+1成为成为ki-1的后继,如图的后继,如图10-3所示。所示。3语言对链表结点的结构描述 在语言中,用结构类型来描述结点结构。例如:在语言中,用结构类型来描述结点结构。例如:struct grade char no7;/*学号学号*/int score;/*成绩成绩*/struct grade *next;/*指针域指针域*/;10.5.2 创建一个新链表案例10.7 编编写写一一个个create()函函数数,按按照照规规定定的的结结点点结结构构,创创建建一一个个单单链表(链表中的结点个数不限)。链表(链表中的结点个数不限)。C C语言程序设计语言程序设计基本思路:首首先

26、先向向系系统统申申请请一一个个结结点点的的空空间间,然然后后输输入入结结点点数数据据域域的的(2个个)数数据据项项,并并将将指指针针域域置置为为空空(链链尾尾标标志志),最最后后将将新新结结点点插插入入到到链链表尾。对于链表的第一个结点,还要设置头指针变量。表尾。对于链表的第一个结点,还要设置头指针变量。另外,案例代码中的另外,案例代码中的3个指针变量个指针变量head、new和和tail的说明如下:的说明如下:(1)head头头指指针针变变量量,指指向向链链表表的的第第一一个个结结点点,用用作作函函数数返回值。返回值。(2)new指向新申请的结点。指向新申请的结点。(3)tail指指向向链链

27、表表的的尾尾结结点点,用用tail-next=new,实实现现将将新新申请的结点,插入到链表尾,使之成为新的尾结点。申请的结点,插入到链表尾,使之成为新的尾结点。/*案例代码文件名:案例代码文件名:AL10_7.C*/#define NULL 0 C C语言程序设计语言程序设计#define LEN sizeof(struct grade)/*定义结点长度定义结点长度*/*定义结点结构定义结点结构*/struct grade char no7;/*学号学号*/int score;/*成绩成绩*/struct grade *next;/*指针域指针域*/;/*create()函数函数:创建一个具

28、有头结点的单链表创建一个具有头结点的单链表*/*形参:无形参:无*/*返回值:返回单链表的头指针返回值:返回单链表的头指针*/struct grade*create(void)struct grade*head=NULL,*new,*tail;int count=0;/*链表中的结点个数链表中的结点个数(初值为初值为0)*/for(;)/*缺省缺省3个表达式的个表达式的for语句语句*/new=(struct grade*)malloc(LEN);/*申请一个新结点的空间申请一个新结点的空间*/C C语言程序设计语言程序设计/*1、输入结点数据域的各数据项输入结点数据域的各数据项*/print

29、f(Input the number of student No.%d(6 bytes):,count+1);scanf(%6s,new-no);if(strcmp(new-no,000000)=0)/*如果学号为如果学号为6个个0,则退出,则退出*/free(new);/*释放最后申请的结点空间释放最后申请的结点空间*/break;/*结束结束for语句语句*/printf(Input the score of the student No.%d:,count+1);scanf(%d,&new-score);count+;/*结点个数加结点个数加1*/*2、置新结点的指针域为空、置新结点的指

30、针域为空*/new-next=NULL;/*3、将新结点插入到链表尾,并设置新的尾指针将新结点插入到链表尾,并设置新的尾指针*/C C语言程序设计语言程序设计 if(count=1)head=new;/*是第一个结点是第一个结点,置头指针置头指针*/else tail-next=new;/*非首结点非首结点,将新结点插入到链表尾将新结点插入到链表尾*/tail=new;/*设置新的尾结点设置新的尾结点*/return(head);程序演示思考题:在在设设计计存存储储学学号号数数据据的的字字符符数数组组时时,其其元元素素个个数数应应为为学学号号长长度度+1。为什么?。为什么?14.5.3 对链表

31、的插入操作案例10.8 编编写写一一个个insert()函函数数,完完成成在在单单链链表表的的第第i个个结结点点后后插插入入1个个新新结结点点的的操操作作。当当i=0时时,表表示示新新结结点点插插入入到到第第一一个个结结点点之之前前,成成为为链链表表新新的首结点。的首结点。C C语言程序设计语言程序设计基本思路:通通过过单单链链表表的的头头指指针针,首首先先找找到到链链表表的的第第一一个个结结点点;然然后后顺顺着着结结点的指针域找到第点的指针域找到第i个结点,最后将新结点插入到第个结点,最后将新结点插入到第i个结点之后。个结点之后。/*案例代码文件名:案例代码文件名:AL10_8.C*/*函数

32、功能:在单链表的第函数功能:在单链表的第i个结点后插入个结点后插入1个新结点个新结点*/*函函数数参参数数:head为为单单链链表表的的头头指指针针,new指指向向要要插插入入的的新新结结点点,i为结点索引号为结点索引号*/*函数返回值:单链表的头指针函数返回值:单链表的头指针*/struct grade*insert(struct grade*head,struct grade*new,int i)struct grade*pointer;/*将新结点插入到链表中将新结点插入到链表中*/C C语言程序设计语言程序设计if(head=NULL)head=new,new-next=NULL;/*

33、将新结点插入将新结点插入 到到1个空链表中个空链表中*/else/*非空链表非空链表*/if(i=0)new-next=head,head=new;/*使新结点成为使新结点成为 链表链表 新的首结点新的首结点*/else /*其他位置其他位置*/pointer=head;/*查找单链表的第查找单链表的第i个结点个结点(pointer指向它指向它)*/for(;pointer!=NULL&i1;pointer=pointer-next,i-);if(pointer=NULL)/*越界错越界错*/printf(Out of the range,cant insert new node!n);els

34、e /*一般情况:一般情况:pointer指向第指向第i个结点个结点*/new-next=pointer-next,pointer-next=new;return(head);程序演示Return C C语言程序设计语言程序设计14.6 14.6 共用型和枚举型简介共用型和枚举型简介共用型和枚举型简介共用型和枚举型简介14.6.1 共用型 1概念概念 使几个不同的变量占用同一段内存空间的结构称为共用型。使几个不同的变量占用同一段内存空间的结构称为共用型。2共用类型的定义共用类型的定义与结构类型的定义类似与结构类型的定义类似 union 共用类型名共用类型名 成员列表成员列表;3共用变量的定义共

35、用变量的定义与结构变量的定义类似与结构变量的定义类似(1)间接定义)间接定义先定义类型、再定义变量先定义类型、再定义变量例如,定义例如,定义data共用类型变量共用类型变量un1,un2,un3的语句如下:的语句如下:union data un1,un2,un3;C C语言程序设计语言程序设计(2)直接定义直接定义定义类型的同时定义变量定义类型的同时定义变量例如,例如,union data int i;char ch;float f;un1,un2,un3;共共用用变变量量占占用用的的内内存存空空间间,等等于于最最长长成成员员的的长长度度,而而不不是是各各成成员长度之和。员长度之和。例例如如,

36、共共用用变变量量un1、un2和和un3,在在16位位操操作作系系统统中中,占占用用的的内存空间均为字节(不是内存空间均为字节(不是2+1+4=7字节)。字节)。共共用用变变量量的的引引用用与与结结构构变变量量一一样样,也也只只能能逐逐个个引引用用共共用变量的成员用变量的成员例例如如,访访问问共共用用变变量量un1各各成成员员的的格格式式为为:un1.i、un1.ch、un1.f。C C语言程序设计语言程序设计5特点特点(1)系系统统采采用用覆覆盖盖技技术术,实实现现共共用用变变量量各各成成员员的的内内存存共共享享,所以在某一时刻,存放的和起作用的是最后一次存入的成员值。所以在某一时刻,存放的

37、和起作用的是最后一次存入的成员值。例例如如,执执行行un1.i=1,un1.ch=c,un1.f=3.14后后,un1.f才才是是有有效效的成员。的成员。(2)由由于于所所有有成成员员共共享享同同一一内内存存空空间间,故故共共用用变变量量与与其其各各成成员的地址相同。员的地址相同。例如,例如,un1un1.iun1.chun1.f。(3)不不能能对对共共用用变变量量进进行行初初始始化化(注注意意:结结构构变变量量可可以以);也也不不能能将将共共用用变变量量作作为为函函数数参参数数,以以及及使使函函数数返返回回一一个个共共用用数数据据,但可以使用指向共用变量的指针。但可以使用指向共用变量的指针。

38、(4)共用类型可以出现在结构类型定义中,反之亦然。)共用类型可以出现在结构类型定义中,反之亦然。C C语言程序设计语言程序设计14.6.2 枚举型1枚举类型的定义枚举类型的定义 enum 枚举类型名 取值表;例如,例如,enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat;枚举变量的定义枚举变量的定义与结构变量类似与结构变量类似(1)间接定义)间接定义例如,例如,enum weekdays workday;(2)直接定义直接定义例如,例如,enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat workday;说明说明(1)枚举型仅适应

39、于取值有限的数据。)枚举型仅适应于取值有限的数据。例如,根据现行的历法规定,周天,年个月。例如,根据现行的历法规定,周天,年个月。(2)取值表中的值称为枚举元素,其含义由程序解释。)取值表中的值称为枚举元素,其含义由程序解释。例例如如,不不是是因因为为写写成成“Sun”就就自自动动代代表表“星星期期天天”。事事实实上上,枚枚举举元元素用什么表示都可以。素用什么表示都可以。C C语言程序设计语言程序设计(3)枚枚举举元元素素作作为为常常量量是是有有值值的的定定义义时时的的顺顺序序号号(从从开开始),所以枚举元素可以进行比较,比较规则是:序号大者为大!始),所以枚举元素可以进行比较,比较规则是:序

40、号大者为大!例例如如,上上例例中中的的Sun=0、Mon=1、Sat=6,所所以以MonSun、Sat最大。最大。(4)枚举元素的值也是可以人为改变的:在定义时由程序指定。)枚举元素的值也是可以人为改变的:在定义时由程序指定。例例如如,如如果果enum weekdays Sun=,Mon,Tue,Wed,Thu,Fri,Sat;则;则Sun=,Mon=,从,从Tue=2开始,依次增。开始,依次增。Return C C语言程序设计语言程序设计14.7 14.7 定义已有类型的别名定义已有类型的别名定义已有类型的别名定义已有类型的别名除可直接使用提供的标准类型和自定义的类型(结构、共用、除可直接使

41、用提供的标准类型和自定义的类型(结构、共用、枚举)外,也可使用枚举)外,也可使用typedef定义已有类型的别名。该别名与标准类型定义已有类型的别名。该别名与标准类型名一样,可用来定义相应的变量。名一样,可用来定义相应的变量。定义已有类型别名的方法如下:(1)按定义变量的方法,写出定义体;)按定义变量的方法,写出定义体;(2)将变量名换成别名;)将变量名换成别名;(3)在定义体最前面加上)在定义体最前面加上typedef。案例14.9 给实型给实型float定义定义1个别名个别名REAL。(1)按定义实型变量的方法,写出定义体:按定义实型变量的方法,写出定义体:float f;(2)将变量名换

42、成别名:将变量名换成别名:float REAL;(3)在定义体最前面加上在定义体最前面加上typedef:typedef float REAL;C C语言程序设计语言程序设计案例14.10 给如下所示的结构类型给如下所示的结构类型struct date定义定义1个别名个别名DATE。struct date int year,month,day;(1)按定义结构变量的方法,写出定义体:按定义结构变量的方法,写出定义体:struct date d;(2)将将变变量量名名换换成成别别名名:struct date DATE;(3)在在定定义义体体最最前前面面加加上上typedef:typedef struct date DATE;说明:(1)用用typedef只只是是给给已已有有类类型型增增加加个个别别名名,并并不不能能创创造造个个新新的的类类型型。就就如如同同人人一一样样,除除学学名名外外,可可以以再再取取一一个个小小名名(或或雅号),但并不能创造出另一个人来。雅号),但并不能创造出另一个人来。(2)typedef与与#define有有相相似似之之处处,但但二二者者是是不不同同的的:前前者者是是由由编编译译器器在在编编译译时时处处理理的的;后后者者是是由由编编译译预预处处理理器器在在编编译译预预处处理时处理的,而且只能作简单的字符串替换。理时处理的,而且只能作简单的字符串替换。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁