设为首页 加入收藏

TOP

Delphi_04_Delphi_Object_Pascal_基本语法_02(一)
2017-10-10 12:06:28 】 浏览:9469
Tags:Delphi_04_Delphi_Object_Pascal_ 基本 语法 _02

  这里简单的描述Object的语法中的基本内容,数据类型。因为代码是自描述的所以不废话,直接贴代码。

{       用户自定义类型
1、数组
2、动态数组
3、记录
4、集合
}


program UserDefine;

{$APPTYPE CONSOLE}



uses
  SysUtils;
{       记录
1、记录相当于C语言中的结构体
2、记录类型通过 type 和 record 关键字来定义
3、记录类型要在使用前定义,通常放在 var 定义之前说
4、可以定义可变记录类型,可变记录类型就和C语言中的unio类型类似
}
//定义一个记录类型
type
    person = record
        name:string;
        id  :integer;
    end;

    {   定义可变记录类型
    1、注意定义可变记录的关键字 record
    2、case 注意定义的形式和语法, 其中,case后面没有配对的关键字
    }
    TvariantRecord = record
        nullStr:pchar;
        intField:integer;
        case integer of
            0:(D:double);
            1:(I:integer);
            2:(C:char);
    end;

    {   集合
    1、集合就是和代数中的集合一样理解, 有点类似于C/C++中的枚举
    2、集合可以进行求交集、并集等操作
    3、集合的定义通过 set 来实现
    4、集合最大只能容纳 256 各元素
    5、集合只能用在序数类型定义,字符串、实数等不能定义
    }
    TCharSet = set of ansichar;
    TWeekSet = set of 0..7 ;  //定义星期的集合
    //TSingleset = set of single;  这个定义要注意

var
    {       数组
    1、数组的下标可以不必从默认的 0 开始,可以从其他数值开始
    2、通过 Low 和 High 函数可以求出不从0开始的数组下标的下界和上界
    3、多维数组的定义通过逗号在数组定义的 [一维长度,二维长度,...]
    }
    //定义一个数组数组相当于C语言中的 int nArray[8]
    //下表从 0 开始,到7 结束
    nArray:array[0..7] of integer;

    //定义一个数组  相当于C语言中的 char chArray[8]
    //下表从 1 开始,到 8 结束
    chArray:array[1..8] of ansichar;

    //定义一个3元素的数组
    fArray:array[10..12] of real;

    //定义一个多维数组
    nMatrix:array[1..2,1..2] of integer;


    {       动态数组
    1、动态数组是在编译期间不能确定维数的数组,需要在运行时确定维数的数组
    2、动态数组在使用前必须先分配内存空间
    3、注意在两个不同行定义的动态数组的类型不一样,如下所示
    4、多维动态数组
    }
    nDynamicArray:array of integer;
    //下面两个动态数组类型一样
    nA1,nA2:array of integer;
    {   下面两个动态数组类型不一样
    nA1:array of integer
    nA2:array of inter
    }
    nA3,nA4:array of integer;
    nA5:array of array of integer;
    nA6:array of array of integer;

    //定义一个record类型变量,注意这里不需要关键字record
    p1:person;
    p2:person;
    p3:person;

    {       可变记录
    1、可变记录的声明和定义与其他变量的定义一样
    }
    variRecord:TvariantRecord;

    {   集合变量
    1、集合的定义与其他数据类型一致
    2、集合变量的赋值和初始化必须使用 [ ], 集合成员之间用逗号隔开
    }
    charSet:TCharSet = ['a','b'];
    charSet_1 : TCharSet = ['b','c','d'];
    weekSet:TWeekSet = [0];


begin
    //引用
    nArray[0]:= 10;

    {   引用chArray[0] 错误,因为下标从1开始
    chArray[0] := 'a';
    }

    //通过函数 Low 和 High 返回下界和上界
    nArray[1]:=Low(fArray);
    //注意数组的上界
    nArray[7]:=High(fArray);

    //访问二维数组中的元素,注意Delphi中多维数组访问元素的与C语言中的差别
    nMatrix[1,1] := 1;
    nMatrix[1,2] := 2;
    nMatrix[2,1] := 3;
    nMatrix[2,2] := 4;

    {       访问动态数组
    1、首先必须申请内存
    2、然后就可以和静态数组一样访问,此时的数组下标从0开始,需要注意
    3、动态数组是生存期管理类型,即超过生存期后,就由系统自动回收
    4、可以通过将动态数组赋值为 nil 就可以提前回收内存。
    5、动态数组时引用类型,有点类似于ansistring
    }
    SetLength(nDynamicArray,30);
    nDynamicArray[0]:= 10;
    writeln(Low(nDynamicArray));
    Writeln(High(nDynamicArray));
    //手动回收内存
    nDynamicArray := nil;
    //nDynamicArray[0]:= 10; //因为访问错误的内存,因此会提前退出程序运行
    SetLength(nA1,2);
    nA2 := nA1;
    nA1[0] := 10;
    nA2[0] := 23;
    //因为nA2是nA1的引用,所以 nA1[0] 也等于23
    writeln(nA1[0]);

    {
    1、注意下面的一段代码与前面代码的区别,上面 nA1与nA2引用同一段内存
    2、下面nA3和nA4指向不同的代码。
    }
    SetLength(nA3,2);
    nA3[0] := 14;
    nA4 := copy(nA3);
    nA4[0] := 15;
    writeln(nA3[0]);

    {   多维动态数组
    1、多维动态数组和一维动态数组一样,使用之前被必须申请空间,赋值和copy也会
    分配空间。
    2、多维动态数组可以分多次给各维申请空间
    }
    //单次分配一维的空间
    setlength(nA5,1);
    //单次分配全部两维的空间
    setlength(nA6,1,1);

    //访问记录变量
    p1.name := 'volacanol';
    p1.id := 512;
    //记录的直接赋值
    p2 := p1;
    //通过with语句赋值记录的成员
    with  p3 do
    begin
        name := 'cnblogs';
        id := 100;
    end;

    // 引用可变记录
    variRecord.nullStr := 'This is null string field.';
    variRecord.intField := 10;
    //  下面是可变记录的可变域
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Delphi_03_Delphi_Object_Pascal_.. 下一篇Delphi_05_Delphi_Object_Pascal_..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目