【01】有序类型
      有序类型是建立在概念“顺序”或“序列”基础上的数据类型。
      你不仅可比较两个有序值的大小,而且可以求取给定有序值的前驱及后继,或者计算它们的最大或最小值。
      三种最重要的预定义有序类型是整数类型、布尔类型和字符类型(Integer,Boolean,Char)。
【02】字符类型
      Delphi可以使用三种类型的字符变量:
      AnsiChar:标准的1字节的ANSI字符。
      WideChar:2字节的Unicode字符。Unicode字符集的前256个字符与ANSI字符集相同。
      Char:相当于AnsiChar。
      字符可用代表它们的符号表示,如'k',也可用数字符号表示,如 #78。
      后者还可用Chr函数表示为 Chr(78),用Ord函数可作相反的转换Ord(k)。
      #9 跳格 (Tab 键)
      #10 换行
      #13 回车 (Enter 键)
【03】枚举类型
      枚举类型(enumerated)是由一组有序的标识符组成的,说明列出了所有这种类型可以包括的值,如下面的例子。
      type Tdays=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
      可以定义上述枚举类型的变量:
      var DayOfWeek:TDays; 
      序列中每个值都对应一个序号,序号从0开始计数。使用Ord 函数,即可得到一个枚举类型值的序号。例如,Ord (Monday) 返回值1。
【04】子界类型
      子界类型(subrange)是下列这些类型中某范围内的值:整型、布尔型、字符型或枚举型。在用户想限制一个变量的取值范围时,子界型是非常有用的。
      type
        Ten = 1..10;
        OverHundred = 100..1000;
        Uppercase = 'A'..'Z';
      定义子界类型时,你不需要指定基类的名字,而只需提供该类型的两个常数。所用基类必须是有序类型,定义结果将是另一种有序类型。
【05】集合类型
      集合类型是一群相同类型元素的组合,集合类型的定义方法:set of <基类型>,例如:
      type
        TLet = 'A'..'Z';
        Letters = set of TLet; //定义集合类型
      var
        Letters1, Letters2, Letters3: Letters;
      begin
        Letters1 := ['A', 'B', 'C'];
        Letters2 := ['K'];
        Letters3 := [];
      一个变量通常包含该类型对应的一个值,而集合类型变量可以不包含值、包含一个值、两个值或更多值。集合中元素不能超过256个。
      a)关系运算
        用in运算符来判断一个给定的元素是否在一个集合中,下面的代码判断在前面所定义的集合T1中是否有200:
        if 200 in T1 then
        //继续运行
        下面的代码判断在TDate中是否没有Mon :
        if not (Mon in TDate) then
        //继续运行
      b)增删元素
        用+、-运算符或Include()和Exclude()过程,可以对一个集合变量增删元素:
        Include(T1, 256); //在集合中增加256 ;
        CharSet : = CharSet + ['d'] ; //在集合中增加'd' ;
        Exclude(CharSet, 'a'); //在集合中删除'a' ;
        CharSet:=CharSet-['a', ' b']; //在集合中删除'a', ' b' ;
        尽可能地用Include()和Exclude()来增删元素,而少用+、-运算符。因为Include()和Exclude()仅需要一条机器指令,而+和-需要多条机器指令。
【06】指针类型
      指针类型的变量指向内存空间的地址。定义指针不需用特定的关键字,而用一个特殊字符,这个特殊字符是脱字符号(^),定义形式如下:
      type PointerName = ^type;
      将@运算符放在变量前面,将获取变量的地址,并可以把地址赋值为同样数据类型的指针。
      把^运算符放在一个数据类型的前面,可以定义该类型的一个指针类型;如果放在一个指针的后面,可以获取该指针指向的地址空间的内容。
      var
        P: ^Integer;
        X: Integer;
      begin
        P := @X;
        X := 10;
        P^ := 20; 
      除了表示已分配内存的地址外,指针还能通过New 例程在堆中动态分配内存,不过当你不需要这个指针时,你也必须调用Dispose 例程释放你动态分配的内存。
      var
        P: ^Integer;
      begin
        // initialization
        New (P);
        // operations
        P^ := 20;
        ShowMessage (IntToStr (P^));
        // termination
        Dispose (P);
      end;
      如果指针没有值,你可以把nil赋给它。nil表示空指针。
【07】记录类型
      type
        Date = record
          Year: Integer;
          Month: Byte;
          Day: Byte;
        end;
      var
        BirthDay: Date;
      begin
        BirthDay.Year := 1997;
        BirthDay.Month := 2;
        BirthDay.Day := 14;
【08】数组类型
      type
        DayTemperatures = array [1..24] of Integer;
      在数组定义时,你需要在方括号中填入一个子界类型的值,或者用两个有序类型的常量定义一个新的子界类型,子界类型指定了数组的有效索引。
      由于子界类型指定了数组下标值的上界和下界,那么下标就不必象C、C++、JAVA和其他语言那样必须从零开始。
      type
        DayTemperatures = array [1..24] of Integer;
      var 
        DayTemp1: DayTemperatures;
      procedure AssignTemp; 
      begin 
        DayTemp1 [1] := 54;
        DayTemp1 [2] := 52;
        ...
        DayTemp1 [24] := 66;
        DayTemp1 [25] := 67; // compile-time error
      数组可以是多维的,如下例:
      type
        MonthTemps = array [1..24, 1..31] of Integer;
        YearTemps = array [1..24, 1..31, Jan..Dec] of Integer;
      这两个数组建立在相同的核心类型上,因此你可用前面定义的数据类型声明它们,如下面代码所示:
      type
        MonthTemps = array [1..31] of DayTemperatures;
        YearTemps = array [Jan..Dec] of MonthTemps;
      上例的声明把索引的次序前后调换了一下,但仍允许变量之间整块赋值。例如:把一月份的温度值赋给二月份:
      var
        ThisYear: YearTemps;
      begin
        ...
        ThisYear[Feb] := ThisYear[Jan];
      使用数组时,你总要用标准函数Low(数组名)和 High(数组名)来返回数组下标的下界和上界。

posted on 2011-09-21 23:50  落雪听尘  阅读(179)  评论(0编辑  收藏  举报