打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Delphi
{       用户自定义类型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;    //  下面是可变记录的可变域,是double类型    variRecord.D := 10.0 ;    writeln(variRecord.D);    //  下面是可变记录的可变域,是integer类型    variRecord.I := 5;    writeln(variRecord.I);    //  下面是可变记录的可变域,是char 类型    varirecord.C := 'a';     writeln(variRecord.c);    // 用 with 语句来初始化可变记录的域,这个与    with variRecord do    begin        nullStr :='This is null string field.';        intField := 19;        d := 13.0 ;        i := 6 ;        c := 'b';    end;    writeln(variRecord.D);  // 输出为13.0 为巧合    writeln(variRecord.I);  // 输出为 98 是因为 b ascii 码值 == 98    writeln(variRecord.c);  // 最后输出为 b 才是正确的    {       集合的操作    1、判断元素是否在集合里面, 通过关键字 in 来实现    2、集合的并集    3、集合的交集    4、往集合中增加元素    5、从集合中删除元素    }    //判断元素是否在集合里面    if 'a' in charSet then    begin        writeln('a is in charSet');    end;    // 集合的并集    if 'b' in (charSet + charSet_1 ) then    begin        writeln('b is in charSet + charSet_1');    end;    // 集合的交集    if 'd' in (charSet * charSet_1 ) then    begin        writeln('d is in charSet * charSet_1');    end;    //通过 Include 和 Exclude  函数或者 + - 运算符增删结合中的元素    //注意集合元素必须用 [ ]    charSet := charSet + ['y'];    if 'y' in charSet then    begin        writeln('y is in charSet.');    end;    // 通过 Include 函数增加集合元素, 注意 include 函数中集合元素    // 不需要 [ ] 来表示。    Include(charSet,'x');    if 'x' in charSet then    begin        writeln('x is in charSet.');    end;    //通过Exclude删除集合元素    Exclude(charSet,'x');    if not ('x' in charSet) then    begin        writeln('after exclude x is not in charSet');    end;    readln;end.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
信息学竞赛→图片作品→查看图片→线性表的数组实现
VBA系列讲座(4):理解变量
第五章 VB 中的数组
3、jqGrid 3.6.2 中文文档——BasicGrid(1)
dijkstra算法(Pascal描述)
数组精讲 | VB编程核心知识总结之数组
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服