首页 Delphi教程—高级数据类型

Delphi教程—高级数据类型

举报
开通vip

Delphi教程—高级数据类型Delphi教程第5章高级数据类型5.1枚举类型5.1.1枚举类型的定义与变量声明1.枚举类型的定义  枚举类型使用一组有限的标识符来表示一组连续的整数常数,它的值是有限的。枚举类型的定义格式如下:type=(,,…);说明:(1)type是系统的保留字,表示定义高级数据类型的开始。(2)表示该类型数据中的元素,圆括号中列出了该类型数据的所有取值,这些取值又称为枚举常量。(3)同一个枚举常量不允许重复出现在同一个枚举类型定义中,也不允许同时出现在不同的枚举类型定义中。2.枚举类型变量的声明其声明的格式与其他类型变量...

Delphi教程—高级数据类型
Delphi教程第5章高级数据类型5.1枚举类型5.1.1枚举类型的定义与变量声明1.枚举类型的定义  枚举类型使用一组有限的标识符来表示一组连续的整数常数,它的值是有限的。枚举类型的定义 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 如下:type<类型名称>=(<标识符1>,<标识符2>,…<标识符n>);说明:(1)type是系统的保留字,表示定义高级数据类型的开始。(2)<标识符>表示该类型数据中的元素,圆括号中列出了该类型数据的所有取值,这些取值又称为枚举常量。(3)同一个枚举常量不允许重复出现在同一个枚举类型定义中,也不允许同时出现在不同的枚举类型定义中。2.枚举类型变量的声明其声明的格式与其他类型变量的声明完全相同例如:VarC:Color;该语句声明了一个枚举类型Color的变量C。5.1.2枚举类型的运算1.使用函数ObjectPascal为枚举类型定义了5个枚举函数,可以进行特殊的运算。说明:(1)枚举类型定义语句中列出的每一个枚举常量都对应一个唯一的序数(整数),称为枚举序数,在缺省情况下,列出的第一个枚举常量对应枚举系数0,以后依次为1、2、3…。枚举函数功能调用格式Ord求枚举系数Ord(枚举常量或枚举变量)Pred求前趋值Pred(枚举常量或枚举变量)Succ求后继值Succ(枚举常量或枚举变量)Low求第1个枚举常量Low(枚举类型名)High求最后1个枚举常量High(枚举类型名)(2)在定义枚举类型时,排在某枚举常量前一位的枚举常量称为该枚举常量的前趋值,后一位的称为后继值。第一个枚举常量没有前趋值,最末一个枚举常量没有后继值。(3)由于每个枚举常量都对应一个枚举系数,所以枚举常量的序数可以进行算术运算,结果类型为整型。但枚举常量之间不能直接进行算术运算,需要先转换为枚举序数。2.关系运算由于每个枚举常量对应一个唯一的序数,因此可以在枚举常量之间进行关系运算。如在上述定义中,sunsat的值为假(false)。5.2子界类型5.2.1子界类型的定义子界类型的定义格式如下:type<类型名称>=<常量1>..<常量2>;说明:(1)<常量1>表示子界类型的下界,即最小值,<常量2>表示子界类型的上界,即最大值。子界的上下界必须属于相同的顺序类型,即它们应同时为整型、布尔型、字符型或同一个枚举类型。(3)子界的上下界所属的数据类型即为子界的基类型,若子界的基类型为 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 数据类型(整型、布尔型、字符型),则子界的上、下界可以直接使用该类型常量,若子界的基类型为枚举类型,则必须先定义基类型(枚举类型),再定义子界类型。(4)子界的上界必须不小于下界。5.2.2子界类型变量的声明  其声明格式与其他类型变量的声明完全相同,如下面的代码声明了一个上述子界类型month的变量ml和workday类型的变量wl:varml:month:wl:workday:5.2.3子界类型的运算  子界类型所允许的运算与其基类型所允许的运算相同,如基类型为整型子界类型变量可以进行算术、关系等运算,而基类型为枚举类型的子界类型变量仅能进行关系运算。5.3集合类型 集合结构是指具有相同性质的对象的全体,构成集合的每个对象称为集合的元素。注意:(1)集合中的元素是互异的、无序的。(2)集合元素个数不能超过256个。(3)元素与集合的关系是“属于”或“不属于”,二者必取其一且仅取其一。5.3.1集合类型的定义其定义格式如下:type<类型名称>=setof<基类型>;说明:(1)<基类型>表示集合中各元素的类型,可以是字符型、布尔型、枚举型和子界等顺序类型,不能是整型、实型和其他的构造类型。(3)若<基类型>为枚举类型或子界类型,则必须先定义该基类型,再定义集合类型。(4)一个集合最多只能有256个元素。另外,只有有序的类型才能跟关键字setof.5.3.2集合变量的声明其声明格式与其他类型变量的声明完全相同。5.3.3变量集合的取值  集合变量不同其他变量,它不是一个单独元素,而是一系列元素的一集合。集合变量的取值称为集合值,其一般表现形式如下:[<元素1>,<元素2>,…,<元素n>] 如果集合类型的基类型有n个元素,则该集合类型变量的取值有2n个,包括一个空集合([])。5.3.4集合类型的运算  集合类型的数据可以进行3大类运算:一类是集合对集合的并、交、差运算,其结果为集合值;一类是集合的关系运算,其结果是 逻辑值;一类是元素对集合的“属于”运算,其结果也是逻辑值。运算名称表示方式运算结果是否满足交换律并运算S1+S2两个集合中所有不重复元素组成的新集合是交运算S1*S2两个集合所共有的元素组成的新集合是差运算S1-S2所有属于S1但不属于S2的元素的集合否相等运算S1=S2如果S1与S2所包含的元素完全相同,则结果为True,否则为False是不等运算S1<>S2如果S1与S2所包含的元素完全不同,则结果为True,否则为False是包含运算S1>=S2如果S2中的元素都在S1中,则结果为True,否则为False否被包含运算S1<=S2如果S1中的元素都在S2中,则结果为True,否则为False否属于运算XinS1如果元素X与集合S1的基类型相同,且被包含在S1中,则结果为True,否则为False.否集合运算符具有不同的优先级,如表所示:5.4数组与记录类型  数组类型(Array)是一些具有相同类型的元素按一定顺序组成的序列。数组中的每一个数据元素都可以通过数组名来存取,它们被顺序安排在内存中的一段连续的区域中。ObjectPascal提供的数组分为静态数组和动态数组。而记录类型可以将不同的数据集中优先级运算符操作数类型结果值类型高*集合集合中+集合集合低=、<>、>=、<=集合逻辑最低in左操作数为元素,右操作数为集合逻辑在一起,并作为一个整体进行操作。 5.4.1静态数组  静态数组在程序初始化时必须分配内存单元,明确其固定的大小和元素的数据类型。1.一维静态数组 数组通常分为为一维、二维和多维数组,定义一维静态数组类型的格式为:type<数组类型名>=array[<下标类型>]of<基类型>; ObjectPascal允许的下标的类型为整数类型、字符类型、布尔类型、子界类型、枚举类型等,而元素的类型可以是任意的数据类 型,并且在同一数组中,所有元素的数据类型必须相同。对于用户定义的数据类型作为下标类型,在使用之前必须声明。  要访问数组中元素,可以用数组名加方括号,方括号内是元素的下标值,方括号内的下标值必须符合数组类型中下标类型的定义,其类型必须与下标类型一致,其值在下标取值范围内。而且下标也可以是表达式。  使用ObjectPascal提供的标准函数Low和high,可以返回一个数组的最小下标值和最大下标值,而函数Length可以返回数组的长度。2.二维静态数组 二维数组是指一个一维数组中的元素类型又是一个一维数组,其一般形式为:type<数组标识符>=Array[<下标类型1>]ofArray[<下标类型2>]of<基类型>;也可以把上述形式写成下面的形式:type<数组标识符>=Array[<下标类型1>,<下标类型2>]of<基类型>;3.多维静态数组多维静态数组的一般格式:type<数组标识符>=Array[<下标类型1>,<下标类型2>,…<下标类型n>]of<基类型>;5.4.2动态数组  动态数组在定义和声明时仅指定数组的类型,而不指定数组的大小,只是在程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 中为程序动态地开辟存储空间。1.一维动态数组一维动态数组的定义格式如下:type<数组类型名>=arrayof<基类型>也可以在变量声明中直接声明动态数组,其格式为:var<变量名>:arrayof<基类型>;  动态数组的声明中没有给出数组的下标类型,因此具有不确定的大小。动态数组的大小通过调用标准过程Setlength来明确。2.多维动态数组声明多维动态数组采用递归定义的方式,如下:type<数组类型名>=arrayofarrayof…arrayof<基类型>;var<变量名>:<数组类型名>或者采用如下方式定义多维动态数组变量:var<变量名>:arrayofarrayof…arrayof<基类型>;  多维动态数组声明后,使用Setlength过程设置动态数组的大小。5.4.3记录类型1.记录类型的定义记录类型定义的格式如下:type<记录类型名>=Record<域名表1>:<类型1>;<域名表2>:<类型2>;...<域名表n>:<类型n>;end;其中,<域名表>可以是多个合法的域名标识符,域名又称为字段名,<类型>可以是任意数据类型。同一个记录类型中不能有同名的字段,而因为作用域的不同,记录内的字段名与记录外的标识符可以相同。2.记录域的访问由于记录类型中各字段的类型不同,所以不能同时访问记录的多个字段,而只能对记录的单个字段进行访问。有两种方法:(1)记录变量名限定为了标识记录字段所属的记录变量,使用记录变量名进行限定,格式如下:<记录变量名>.<字段名>则为记录的单个字段赋值可以使用如下语句:C1.Custid:=1;C2.IfPay:=True;(2)使用With语句如果需要经常访问记录的字段,每次都用记录变量名进行限定非常麻烦,可以使用With语句加以简化。With语句格式如下:With<记录变量名>DO<语句>其中,<语句>可以是简单语句,也可以是复合语句。在<语句>中字段的访问不需要加记录变量名进行限定。3.记录的变体部分带有变体部分的记录类型的声明格式为:type<记录类型名>=Record<域名表1>:<类型1>;<域名表2>:<类型2>;...<域名表n>:<类型n>;Case<识别字段标识符>:<识别字段类型>of<常量表1>:<字段列表1>;<常量表2>:<字段列表2>;…<常量表n>:<字段列表n>;end;注意:(1)Case前面的声明部分同平常的记录类型声明一样,但如果记录域中含有变体部分,则变体部分应位于记录域的最后。(2)变体部分总识别字段标识符是可选的,省略时连同“:”号一起省略,在同一记录域中必须是唯一的。识别字段类型必须是顺序类型,如果是枚举或子界类型,则必须事先声明。其中的字段列表i同普通的记录类型中域名表的声明相同。其功能应用类似于选择结构中的Case语句。5.5指针类型   指针是一种特殊的数据类型,指针类型(Pointer)的变量称为指针变量。指针变量具有一般变量的三个基本要素,即变量名、变量类型、变量值,它与一般变量的不同,它是用来存放其他变量内存地址的一种变量。5.5.1指针变量的声明定义指针类型的语法如下:type<指针类型名>=^<基类型> 其中,<基类型>可以是基本数据类型,如整型、实型、字节型等,也可以是高级数据类型,如集合、数组、集合等类型。5.5.2指针变量的赋值为指针变量赋值的格式如下:<指针变量名>:=@<标识符> 其中,“@”操作符是个一元操作符,用于获取操作数的内存地址,@后面的操作数可以是变量、过程和函数等。5.5.3无类型指针变量  无类型的指针是指指针变量在声明时没有指明基类型,无类型指针在声明中只使用Pointer,其声明格式如下:var<指针变量名>:Pointer;  无类型的指针的作用是它可以指向任何类型,对于无类型指针,不能用指针变量符号后加^的形式来引用它的动态变量。5.5.4字符指针类型  字符指针类型即Pchar数据类型,是一个指向以NULL字符结尾的字符串的指针。主要用于与外部函数如在WindowsAPI中所用的函数兼容。在Delphi7中,可以把一个字符串直接赋值给一个Pchar类型的变量。5.5.5指针变量的动态使用1.New过程和Dispose过程  如果不使用@运算符为指针变量赋值,则指针变量称为动态指针变量,动态变量在访问之前必须首先分配内存单元。ObjectPascal提供了标准过程New,用来为动态变量分配内存单元,并把该单元的地址赋给指针变量,所分配单元的大小由指针所指的类型决定。如果应用程序的堆栈中已没有足够的空间,将触发EoutOfMemory异常。调用New过程的格式如下:   New(<指针变量名>);  调用过程New(p)之后,可以用“p^”表示一个整型的动态变量,对其进行操作。  当程序不再需要使用动态变量时,就调用标准过程Dispose删除New所创建的动态变量,并释放所分配的内存单元。调用Dispose过程的格式如下:   Dispose(<指针变量名>);2.GetMem过程和FreeMem过程  标准过程GetMem用于为动态变量申请一块指定大小的内存区域,并把该区域的起始地址赋给指针变量。如果应用程序的堆栈中已没有足够的空间,将触发EoutOfMemory异常。调用GetMem过程的格式如下:  GetMem(<指针变量名>,<区域大小>);  如果程序不再需要使用动态变量时,就调用标准过程FreeMem删除GetMem创建的动态变量,并释放所分配的内存单元。调用FreeMem过程的格式如下:   FreeMem(<指针变量名>);3.动态指针的应用举例  链表是一组元素的序列,在这个序列中,每个元素总是与它前面的元素相链接(第一个元素除外)。这种链接关系可通过指针来实现。地址13地址212地址319地址47Nil图5-8自然数链表  链表中的元素通常称为节点,第一个节点称为表头,最后一个节点称为表尾。指向表头的指针称为头指针,在这个头指针中存放着表头的地址。节点一般用记录来描述,描述节点的记录至少含有两个域,一个域用来存放数据,该域的类型根据要存放的数据类型而定,称为值域;另一个域用来存放下一个节点的地址,称为指针域。表尾不指向任何节点,其指针的值为Nil。  节点可以通过记录类型来描述,并且记录类型里包含一个指针域,链表节点的声明如下:typeNode=recorddata:string;next:^Nodeend;varHead:^Node;//定义头节点变量Head;或者采用如下方式:typeLink=^NodeNode=recorddata:string;next:^Nodeend;varHead:Link;谢谢大家!
本文档为【Delphi教程—高级数据类型】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
都绘匠人
国家注册城乡规划师,资深工程师,具备城乡规划领域多年从业经历
格式:ppt
大小:538KB
软件:PowerPoint
页数:31
分类:理学
上传时间:2022-04-22
浏览量:0