Delphi_04_Delphi_Object_Pascal_基本语法_02
这里简单的描述Object的语法中的基本内容,数据类型。因为代码是自描述的所以不废话,直接贴代码。
{ 用户自定义类型 1、数组 2、动态数组 3、记录 4、集合 }program UserDefine;{$APPTYPE CONSOLE}usesSysUtils; { 记录 1、记录相当于C语言中的结构体 2、记录类型通过 type 和 record 关键字来定义 3、记录类型要在使用前定义,通常放在 var 定义之前说 4、可以定义可变记录类型,可变记录类型就和C语言中的unio类型类似 } //定义一个记录类型 typeperson = recordname:string;id :integer;end;{ 定义可变记录类型1、注意定义可变记录的关键字 record2、case 注意定义的形式和语法, 其中,case后面没有配对的关键字}TvariantRecord = recordnullStr:pchar;intField:integer;case integer of0:(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 integernA2: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] 也等于23writeln(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 dobeginname := '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 dobeginnullStr :='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 码值 == 98writeln(variRecord.c); // 最后输出为 b 才是正确的{ 集合的操作1、判断元素是否在集合里面, 通过关键字 in 来实现2、集合的并集3、集合的交集4、往集合中增加元素5、从集合中删除元素}//判断元素是否在集合里面if 'a' in charSet thenbeginwriteln('a is in charSet');end;// 集合的并集if 'b' in (charSet + charSet_1 ) thenbeginwriteln('b is in charSet + charSet_1');end;// 集合的交集if 'd' in (charSet * charSet_1 ) thenbeginwriteln('d is in charSet * charSet_1');end;//通过 Include 和 Exclude 函数或者 + - 运算符增删结合中的元素//注意集合元素必须用 [ ]charSet := charSet + ['y'];if 'y' in charSet thenbeginwriteln('y is in charSet.');end;// 通过 Include 函数增加集合元素, 注意 include 函数中集合元素// 不需要 [ ] 来表示。Include(charSet,'x');if 'x' in charSet thenbeginwriteln('x is in charSet.');end;//通过Exclude删除集合元素Exclude(charSet,'x');if not ('x' in charSet) thenbeginwriteln('after exclude x is not in charSet');end;readln; end.
欢迎转载,转载请注明来源。
转载于:https://www.cnblogs.com/volcanol/p/5324449.html
Delphi_04_Delphi_Object_Pascal_基本语法_02相关推荐
- 【JavaScript总结】JavaScript语法基础:BOM
DOM是文档对象模型,操作对象是文档 window.document,和浏览器没有直接关系 DOM常用事件: onload,onbeforeunload, onunload onclick,ondbl ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 第二天:Vue基础语法
1.计算属性的setter和getter 每个计算属性都有setter和getter 一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写 <!DOCTYPE htm ...
- LLVM语法语义指令特性
LLVM语法语义指令特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数,全局变 ...
- LLVM一些编程语法语义特性
LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...
- LLVM一些语法规则
LLVM一些语法规则 LLVM文档 LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目. 同样,文档分为几个针对不同受众的高级别分组: LLVM设计概述 几 ...
- 2021年大数据Hive(四):Hive查询语法
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...
- 2021年大数据常用语言Scala(十八):基础语法学习 Map对象
目录 Map对象 不可变Map 可变Map Map基本操作 Map对象 Map可以称之为映射.它是由键值对组成的集合.在scala中,Map也分为不可变Map和可变Map. 不可变Map 定义 语法 ...
最新文章
- 软件驱动安装在docker_docker 安装软件
- opencv-python将视频切分成帧
- Android开发经典笔试面试题汇总(持续更新中)
- JDK 9 REPL:入门
- vue v html安全,vue 中控制v-html 中的样式,但不影响全局的小技巧
- Pagination(分页) 从前台到后端总结
- 【机器学习-西瓜书】二、性能度量:召回率;P-R曲线;F1值;ROC;AUC
- 最新的.net书籍教程 更新时间:2005-9-5
- spring MVC 使用 modelAndView.setViewName(forward:*.action) 发送重定向
- 相亲交友小程序开发方案及源码
- java单例的生命周期_Spring Bean生命周期详解
- vr虚拟现实计算机配置,什么样的电脑配置才能玩得起VR?
- 【网络】应用层-HTTP协议
- shell学习笔记---工具学习
- 【书影观后感 三】1587—雪后的大明
- 解决工作流:org.activiti.engine.ActivitiException: Unknown property used in expression: ${AAAAA}报错
- 一幅长文细学Vue(一)——Webpack打包工具
- JDBC(数据库和Java)
- markdown 换行_Markdown编辑神器-Typora
- Python-Django毕业设计快递寄取微信小程序(程序+Lw)
热门文章
- 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程
- 关于 通过http请求 无法访问Linux下的ftp服务的解决办法!
- JavaScript基础一
- tensorflow model save and restore
- 支付宝app支付对接2(文档和对接注意问题)
- 存储过程与事务应用两三事
- SCCM 2012系列之新特性概览一:SCCM 2012安装选项和控制台新界面预览
- 判断图有无环_萧阳环保教你判断布袋除尘器是否合格记住这3点
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
- Win10系统下安装VC6.0教程