飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4932|回复: 2

[Delphi] 以前的Delphi系列学习笔记(3) 枚举,子界,集合,指针,数组,记录类型

[复制链接]
  • TA的每日心情
    奋斗
    2017-4-20 22:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-26 21:00:05 | 显示全部楼层 |阅读模式
    枚举类型:
    有些数据的个数总是有限的。而且可以一一列举出来,为此delphi提供了一种类型为权举类型
    如:星期:(只有星期一到星期日)
    颜色:(红,绿,蓝,白,黑)假定某个物体只能取这五种颜色

    A:枚举类型的定义:
    type
      类型名称=(标识符1,标识符2...标识符n)
    比如:
      type color=(red,blue,green,white,black);
    说明:
      1:类型标识符是用户自定义的枚举类型名称.
      2: 标识符表示该类型数据中元素。以后该类型的元素就只能够取这些值
      3: 枚举常量不充许在同一个枚举型定义中重复出现
      4: 枚举常不充许在不同类型定义中重复出现

    B:枚举型变量的声明:
      var c1,c2:color;

    C:枚举类型的运算:
    从本质上讲,枚举类型不过就是用一些枚举常量来表示一组连续的整数,这些枚举常量就像符号常量,是 整数的形像化表示。
    1:使用函数 如: type week=(sun,mon,tue,wed,thu,fri) 则
      ord(tue)=2 low(week)=0 high(week)=5 [用 CharCase属性来说明枚举类型在delphi的应用]
    ------------------------------------------------------------------------------------------------------------------
    子界类型:
    在实际的应用中,许多的变量的取值都有一定的限制的。如每年的月份数在1---12之间。等。也就是说这种类型的变量可以取很多值,但是它们只能取在类型中定义的某个范围之内的值,这就是子界类型。

    A:子界类型的定义:
    type
      类型名称=常量1..常量2;
    比如: type moth=1..12;
    说明:
      1:子界的上界必须不小于界
    B:子界类型变量的声明:
      var m1:month;
      也可以不经过类型定义而直接定义子界类型的变量   比如:m1,m2:1..12;[这样m1或m2就只能够取1到12之间有每一个值了]
    C:子界类型所充许的运算其类型所充许的运算完全一致。
    ------------------------------------------------------------------------------------------------------------------
    集合类型:
    集合是指具有相同性质且可以相互区分的对像的全体。构成集合的各个对像,称为集合的元素。如小于100的正整数全体等。 在delphi中许多对像的属性被定义为集合类型。
    A:集合类型的定义:
    type
      类型名称=set of 类型
    说明:类型表示集合中各个元素的类型,可以是字符型,布尔型,枚举型和子界型等。不能是整型,实型
    比如:
      numbers=set of 1..100 直接可出枚举类型或子界类型。
      uchar=set of 'a'..'z';
      color=set of (red,green,yellow,white)等。
      也可以先定义枚举或子界类型再定义集合类型 如:
      type
        color=(red,green,yellow,white);
        tcolor=set of color;
    说明:
    在delphi中,集合元素的个数最多不能超过256个,因此类型的序数值必须在0-255之间。由于整型数据 的取值范围是-32768----32767之间,所以类型不能是整型。且子界类型只能在0-255范围内。

    以下定义是错误的:
    type numbers=set 100..300;

    B:集合变量的声明:
    如:
    type
      color=(red,green,yellow,white);
      tcolor=set of color;
      var
        colo1,colo2:tcolor
    也可以不经过定义直接声明集合类型的变量
    var
      c1:set of (red,green,yellow,white)等。
    C:集合变量的取值:
      集合变量的取值称为集合值。它是基类型元素的一个集合。集合值一般用方括号括起来的元素序列,元素 和元素之间用逗号隔开。
    比如:
      type
         colors=(read,yellow,blue);
         tcolor=set of colors;
      var
         co:tcolor;
      则:
         co=[],co=[red],co=[red,yellow]等。
    说明:
    1:集合变量中重复元素被视作同一个元素。如:[red,yellow] =[red,yellow,red]
    2:若集合中的元素连续出现,则可以写成子界的形式如集合[0,1,2,3,4,5,6,7,8,9]等于[0..9]

    集合的运算:
    1:并运算:[1,2,3]+[2,3,4]=[1,2,3,4]
    2:差运算:[1,2,3]-[2,3]=[1]
    3:交集运算 [1,2,3]*[2,3] = [2,3]
    集合的关系运算:
    元素对集合的属于运算:
    如 2 in [3,2] 为 true; 4 in [3, 2] 为 false等。
    集合关系的相等运算:[2,3]=[3,2] true
    集合在delphi中的应用:
    1:字体样式:fontstyle
        这个在设置字体的时候有,比如Form1.Font.Style := [fsbold,fsunderline];//粗体字,有下划线
    2:对文本框的限制: key in ['0'..'9',#8]
    3:对shift键的限制:

    ------------------------------------------------------------------------------------------------------------------
    数组:
    1:一维数组:
    定义:
      type
      数组类型标识符=array[长度] of 元素类型
    比如: type  
             myar=array[1..5] of integer  //看到这个定义,应该很明了,这是一个集合定义1..5。
             myte=array[1..5] of string
    定义了数组类型之后,再定义变量:
    var
      t1:myar;t2:myte;等
    当然也可以把数组的类型定义和数组的变量的定义合二为一如:
    var
      test1,test2:array[0..4] of real等。
    要访问数组里面的元素可以用数组名加上方括号来表示如:test1[0]:=3.4等。
    函数low,high这两个函数可以返回一个数组的最小下标和最大下标。而通过函数length可以返回数组的 长度。如 low(test1)=0 high(test1)=4 length(test1)=5
    和C语言中数组的区别:
       C中数组的索引只能从0开始,比如int a[5];但是在Delphi中,数组的下限索引未必是从0开始的,这个由用户自己定义的,比如上面定义的array[1..5] of integer;下限就是从1开始。

    2:二维数组:
    定义:
      type
         数组类型标识符=array[行长度,列长度] of 元素类型
    如:
    type
       tp=array[0..3,0..4] of integer [3行四列]
    除上面的定义方式外,二维数组定义还有一种办法,就是先定义一个一维数组,然后再定义,比如上面的可以定义为
      tp = array[0..3] of array[0..4] of integer;
    定义变量:
    var
      tp1:tp; 或tp1:array[0..3,0..4] of integer;
    引用: tp1[2,3] 不是 tp1[2][3],这个与C又有区别了啊!注意!

    说明:
    1:在一个var里面定义的两个数组之间可以可以整体赋值
    如:
    var
      ar1,ar2:array[1..4] of integer;
    var
      ar3:array[1..4] of integer
    可以执行: ar2:=ar1;
    但是不能执行: ar3:=ar1;
    2:可以把数组作为过程的参数:
    如;
    procedure myporc(x:array of string)
    begin
    .....

    ------------------------------------------------------------------------------------------------------------------
    记录类型:
    相当于我们C语言里面的结构体
    定义:
    type
      记录类型标识符=record
      成员1:类型;
      成员2:类型;
      ....
      成员n:类型;
    end;
    比如:
    type
      right=record
        mc:string;
        name:string;
        righ:string;
    end
    除了上面这样定义外,结构体定义还有另外一种方式,就是
    type
      结构体名= packed record
      end;
    这里有一个packed关键字,有了这个关键字,就是不采用对齐方式进行排放,否则就会按照4字节对齐的方式来对结构体的内存数据进行排放,如果不够4字节,Delphi会自动补齐4字节,这样做的好处是,加快了查询速度,弊端是增大了程序体积!


    ------------------------------------------------------------------------------------------------------------------
    指针类型:
    定义:
    type
      指针类型标识符=^基类型。
    比如:
      type
        st=^string; 或 pi=^integer;
    定义指针类型的变量:
    var
      test:st;
    指针的运算:
      new:用于在程序中为动态变量分配一块区域,并把该区域的地址赋给指针变量。所分配的大小由指针 所指的类型决定,当调用了new过程后,程序就可以用"p^"[相当于*p]作为指针所指类型的动态变量。。相应地当程序不再使用动态变量时,就应当调用dispose删除new创建的动态变量。并释放所分配的空间。
    比如:
    type
      pi:^integer;
    var
      p1,p2:pi;
      p:integer;
    begin
      p:=20;
      p2:=@p;//使p2指向整型变量p
      new(p1);//p1没有指向任何变量,而是通过调用new函数在内存中找一快空闲的单元分 配给p1
      p1^:=20 [p1所指向的单元赋值为20]
      p2^:=20 [p2所指向的单元即p值为20]
    end;
    @操作符:相当于C里面的&取地址符
    例子程序: 例子.rar (2.21 KB, 下载次数: 3)
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-26 21:22:20 | 显示全部楼层
    期待你更好的文章!加油!
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2017-12-18 18:11
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-6-1 07:16:41 | 显示全部楼层
    同二楼。。。。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表