1、第2章 Delphi语法基础第2章DELPHI语法基础11、字符集32、特殊符号32.1保留字与标识符32.1.1 保留字32.1.2 标识符31标准标识符32自定义标识符43标识符的限定42.1.3 指令符42.2数据类型52.2.1 数值型数据61整型62. 实型72.2.2 字符数据71.字符型72.字符串型82.2.3 布尔型82.3 常量与变量92.3.1 常量91. 直接常量92. 符号常量103. 类型常量112.3.2 变量111. 变量的声明122. 变量使用132.4 运算符与表达式132.4.1 算术运算符与表达式131. 算术运算符132. 算术表达式143、算术运算符
2、的优先级142.4.2 位运算符142.4.3 字符串运算符152.4.4 关系运算符152.4.5 布尔运算符162.4.6 运算符的优先顺序172.4.7 求值方式172.5 常用函数与过程172.5.1 数学类函数181绝对值函数定义: function Abs(X);182平方与平方根函数183 三角函数184 整数部分与小数部分195 取整函数196 指数与对数函数217随机函数218函数222.5.2 字符处理函数221 大小写转换函数222 比较先后顺序函数223 合并字符串234 查找字符串函数235 求字符串长度函数236 截取子字符串函数237删除子字符串过程248插入子字
3、符串过程249数值和字符串相互转换2410 ASCII转换为字符2611 格式化函数262.5.3 日期时间函数271 日期与时间函数272 日期函数273 时间函数274 转换函数275 星期函数276 日期与时间的格式272.5.4 顺序类型函数281. 顺序类型282. 顺序函数282.6 语句282.6.1 语句的书写规则282.6.2 语句格式中的符号约定292.6.3 赋值语句292.6.4 注释语句291. 格式292. 嵌套303. 注释的原则302.6.5 复合语句30Delphi 是一个基于Object Pascal语言的Windows应用程序开发系统,在所有的事件处理过程
4、和应用程序中都是使用它来编写程序代码。Object Pascal编程语言是在Pascal 语言的基础上发展起来的,它继承了Pascal语法严谨、数据结构丰富等优点,同时融入了面向对象编程的语法要素,使之成为一种优秀的面向对象编程语言。1、字符集Object Pascal使用ASCII字符集,包括字母A到Z和a到z,数字0到9,以及其他的标准字符,编译器对大小写不敏感。2、特殊符号特殊符号是非字母非数字的字符或字符对,特殊符号有固定含义。下面的单个字符都是特殊符号:# $ & ( ) * + , ? . / : ; 下面的字符对也是特殊符号:(* (. *) .) . / := = 需要注意的是
5、,!(叹号)、”(双引号)、%(百分比符号)、?(问号)、(反斜杠)、_(下划线)、|(管道)以及(代字号)不是特殊符号。2.1保留字与标识符首先介绍Object Pascal语言的最基本内容:保留字和标志符。2.1.1 保留字保留字(Reserved Words)是由系统规定的、具有特定意义的单词。在编程时不能被重新定义或另作他用。Object Pascal 语言规定的保留字有65个。说明:除了上述的保留字外,Private、Protected、Public、Published 和Automated在定义对象类型时也作为保留字,而在其他场合则作为指令符。单词at和on也具有特殊的含义。注意:
6、Object Pascal 编程语言和许多编程语言不同,它对单词的大小写是不敏感的。Object Pascal不区分大小写。IN、in和In都被看做是同样的意义。2.1.2 标识符标识符是一种符号,标识符用来表示常量、变量、字段、类型、过程、函数、程序、单元、库、包和记录中的域等。标识符分为标准标识符和自定义标识符两类。1标准标识符标准标识符是Object Pascal语言系统预先分配给标准常量、标准类型、标准函数、标准过程及标准文件使用的标识符。如:l 标准常量:例如Boolean类型数据的取值True和False。l 标准类型:例如Boolean,char,text等。l 标准过程:例如P
7、ut、Reset等。l 标准函数:例如sin(正弦函数)、Cos(余弦)等。l 标准文件:例如Input、TextFile等。2自定义标识符 自定义标识符是程序员根据需要为自己定义的常量、变量、类型、函数、过程以及所编写的程序名等。Object Pascal标识符的命名规则:(1)必须以字母或下划线开始,在标识符的第一个字符之后,字母、数字、下划线都是允许的。(2)标识符的长度可以是任意的,但只有前255个字符是有意义的。(3)不能与保留字相同;避免与Object Pascal已经使用的标准标识符相同。(4)必须先定义或说明,才能被使用。(5) Object Pascal语言对字符大小写是不敏
8、感的。例如,标识符CalculateValue可以被写成以下几种方式:CalculateValuecalculateValuecalculatevalueCALCULATEVALUE(6)标识符的命名要尽量采用有意义的符号(例如英文单词),既便于记忆,也增加程序的可读性。 例如:_abc xyz an4 都是合法的4an and abs x+y hello hi! 都是不合法的3标识符的限定当使用的标识符在多于一个单元中都有声明时,有时有必要限制标识符。限制标识符的语法如下: identifier1.identifier2这里的identifier1限制了identifier2。例如,如果两个
9、单元中都声明了名为CurrentValue的变量,那么可以通过对标识符进行限制来指定访问Unit2中的CurrentValue,写成 Unit2.CurrentValue此外,Object Pascal允许迭代限制。例如语句:Form1.Button1.Click调用了Form1中Button1的Click方法。如果不对标识符进行限制,那么编译器将根据作用域规则确定对该标识符的解释。2.1.3 指令符指令符(directives)也是具有特殊意义的单词,对源代码中的特殊位置是敏感的。在Object Pascal中,指令符具有特殊意义,但与保留字不同的是,指令符仅出现在用户定义的标识符不能出现的
10、上下文(范围)中。因此,可以定义与指令符正好一样的标识符,尽管这样做是不妥当的(从代码易读的角度来说,容易产生混淆和歧义,尽管编译器能够正确区分)。下面的例子说明了指令符与保留字的区别。 procedure ProcMyMsg(var message:TMessage); message WM_USER + 100;在上面的代码中,出现的两个message具有不同含义。前者作为ProcMyMsg过程的参数,是一个标识符;可以用任何有效的标识符来替换(这样就不至于产生歧义),但不能用保留字来替换后者作为指令符,含义是把过程ProcMyMsg作为消息处理程序,与消息WM_USER + 100联系在
11、一起。无法用其他标识符或保留字来替换。 下面的写法将不被编译器认可:procedure ProcMyMsg(var for: TMessage); message WM_USER + 100;保留字不能作为标识符,也尽可能不要定义与指令符同名的标识符。2.2数据类型描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序加工处理的符号的集合称为数据。数据的一个重要特征就是其所属的数据类型,数据类型不仅确定了该类数据的表示形式和取值范围,而且还确定了数据所能够参加的各种运算。Object Pascal提供了多种数据类型,包括标准数据类型和高级数据类型。l 标准数据类型属于Object Pas
12、cal内部约定的数据类型,无需定义就可以直接使用。标准数据类型有整型(Integer)、实型(Real)、字符型(Character)、字符串型(String)、布尔型(Boolean)五种。l 高级数据类型体现了特殊的数据结构,在使用之前必须由用户自己进行定义。高级数据类型有枚举型(Enumerated)、子界型(Subrange)、集合类型(Set)、数组类型(Array)、记录类型(Record)文件类型(File)、类类型(Class)、类引用类型(Class Reference)、接口类型(Interface)、指针类型(Pointer)、过程类型(Procedural)、可变类型(
13、Variant)。此外,类型标识符自身可以被视为属于某个特定类型,因为他们可以被作为参数传递到某些函数中(如High、Low、SizeOf等)。l 其中的整型、字符型、布尔型、枚举型和子界型为顺序类型。其取值为有序的集合,每个可能的取值都与顺序有关。l 类型可以分为基本(fundmental)类型和一般(generic)类型。不管基于何种CPU和操作系统,基本类型的范围和格式在Object Pascal的所有执行中都是相同的。一般类型的范围和格式根据平台的不同而有所区别,并且在不同的执行中也有变化。大部分预定义类型是基本类型,但一小部分的整数、字符、串和指针类型是一般类型。尽可能地使用一般类型
14、是个好主意,因为他们提供了最佳的性能和可移植性。2.2.1 数值型数据数值型数据分为两类十三种1整型整数包括正整数、负整数和零。整型是存储整数数据的类型。Object Pascal包括9种形式的整型数据。一般的整数类型是Integer和Cardinal,需要时,应当尽可能地使用这两种类型,因为它们在各种CPU和操作系统中都提供最佳的性能。下面是32位Object Pascal编译器中这两种整数类型的范围和存储格式:类型范围格式Integer-2147483648.2147483647含符号的32位Cardinal0.4294967295无符号的32位基本整数类型包括Shortint、Small
15、int、Longint、Int64、Byte、Word、Longword,如下:类型范围格式Shortint-128.127含符号的8位Smallint-32768.32767含符号的16位Longint-2147483648.2147483647含符号的32位Int64-263.263含符号的64位Byte0.255无符号的8位Word0.65535无符号的16位Longword0.4294967295无符号的32位通常,作用于整数的算术运算符返回Integer类型的值,在当前执行中,等价于32位的长整型(LongInt)。仅当对Int64类型执行运算时,运算结果返回Int64类型。2. 实
16、型实型是存储实数数据的类型。实数类型定义了可以用浮点符号表示的数的集合。Object Pascal包括5种形式的实型数据。下表给出了基本实数类型的范围和存储格式:类型范围精度占字节数Single1.5 x 10-35 . 3.4 x 1038784 Double5.0 x 10-324 . 1.7 x 1030815168 Extended3.6 x 10-4951 . 1.1 x 104932192010 Currency-922337203685477.5808. 922337203685477.580719208 一般类型Real,在当前Object Pascal实现中等价于Double
17、。类型范围精度占字节数Real5.0 x 10-324 . 1.7 x 1030815168 目前多数系统都按照IEEE-754标准来规定浮点数的存储格式。IEEE754规定:实数分为三个部分:符号位、阶码和尾数。阶码即指数,尾数即有效小数位数。l 单精度浮点数用4字节存储,单精度格式阶码占8位,尾数占23位,符号位1位,l 双精度浮点数用8字节存储,双精度则为11位阶码,52位尾数和1位符号位。下列注释适用于基本实数类型:Extended比其它实数类型提供了更高的精度,但同时也占用较多的空间。当要创建跨平台共享是数据文件时,应谨慎使用该类型。Curreny是定点数据类型,该类型在货币计算时使
18、舍入误差最小。Currency类型以含格式的64位整数存储,其中隐含地包括了表示小数部分的4位最少有效数字。在赋值语句和表达式中将该类型与其他实数类型混合时,Currency类型的值会自动被除以或乘以10000。(大多数货币数字都只含有2位小数,Currency类型总是保留4位小数,这就足以使货币计算的误差降到最小。)该类型与其他实型进行运算,Delphi自动将结果转化为Currency类型。2.2.2 字符数据1.字符型字符型是存储单个字符的类型。Object Pascal包括3种形式的字符型数据。基本字符类型是AnsiChar和WideChar。AnsiChar的尺寸是一个字节(8位)。W
19、ideChar的尺寸是一个字(16位),其字符顺序参照Unicode字符集,Unicode字符集中的前256个字符对应ANSI字符。最常用的字符类型,一般字符类型Char,等价于AnsiChar。字符类型数据的表示方法是用两个单引号括起单个字符如:A、6、 . 。 表示空字符。2.字符串型字符串型是存储字符串数据的类型。Object Pascal包括4种形式的字符串型数据。类型最大长度占用内存用于ShortString255个字符 2到256字节向后兼容AnsiString大约231个字符4字节到2GB8位(ANSI)字符WideString大约230个字符4字节到2GB多用户服务和多语言应用
20、程序String大约231个字符4字节到2GB8位字符保留字string的作用 一般类型的标识符。例如:var S: string; /创建了变量S,用于保存字符串。在默认的编译指示H+状态下,编译器将string(后面没有跟随方括号和数字)解释为AnsiString;使用编译指示H-时,解释为ShortString。ShortString类型串的长度在0到255之间。ShortString串的长度可以动态改变,其占用的内存是静态的,总是256字节;第一个字节存储串的长度,其余255个字节存储串中的字符。AnsiString也叫做长串(long string),用来表示动态分配的串。WideS
21、tring类型表示16位Unicode字符的动态分配的串。WideString类型大部分的特性与AnsiString类型相似。Object Pascal还支持其他最大长度在0到255之间的短串。可以通过在保留字string后边附加方括号括起来的数字来表示。例如:var MyString: string100;2.2.3 布尔型布尔型数据用于进行逻辑运算,布尔型数据的值只有两个:True(真)和False(假)。Object Pascal中提供了4个预定义布尔类型:Boolean、ByteBool、WordBool、LongBool。其中,Boolean是首选类型,其他布尔类型是为了向其他语言和
22、操作系统提供兼容。Boolean变量占用一个字节的内存,ByteBool变量也占用一个字节,WordBool变量占用两个字节(一个字),LongBool变量占用四个字节(双字)。下面是各种布尔类型中值的关系:BooleanByteBool, WordBool, LongBoolFalse TrueFalse TrueOrd(False) = 0Ord(False) = 0Ord(True) = 1Ord(True) 0Succ(False) = TrueSucc(False) = TruePred(True) = FalsePred(False) = True对于ByteBool、LongBo
23、ol、WordBool类型,当值的序号非零时,值被认为是True。如果这样的一个值出现在需要Boolean类型的上下文中,编译器将自动将所有序号非零的值转换成True。上面的说明是指布尔值的序号而不是指布尔值。在Object Pascal中,布尔表达式不能被等同为整数或实数。因此,如果 X 是一个整数类型的变量,那么语句if X then .;将产生一个编译错误。转换变量到布尔类型是不可靠的,可以通过下面的语句来达到相同的目的:if X 0 then .; 使用长的表达式返回布尔值 var OK: Boolean 使用布尔变量 .if X 0 then OK := True;if OK the
24、n .;2.3 常量与变量在程序设计中常用到两种形式的数据,一种是在程序执行过程中其值保持不变的数据,称为常量;另一种是在程序执行过程中其值可以改变的数据,称为变量。2.3.1 常量常量是一种在程序执行进程中其值保持不变的数据。根据使用的方式不同,程序中的常量分为直接常量、符号常量与类型常量。1. 直接常量直接常量是指在程序中直接引用的整数、实数、字符、字符串或其他不同类型的常数。下列常数均属于直接常量。(1)整型常量l 可以十进制的阿拉伯数字序列来表示,序列中不能含有逗号、空格等分节符。 例如:12 34 合法 123,444,567,000 不合法l 前缀正号(+)或负号(-),用于表示数
25、字的符号。例如,67258 等价于 +67258 -1234 l 美圆符号前缀表示16进制数字,例如 $8F 。l 注意:赋值时,如果16进制数值在被赋值类型范围之外,那么将引发异常。而如果是向32位的Integer类型赋值,数值超出范围时只提出警告而不引发异常。这种情况下,超出Integer类型正数范围的数值将作为负数被接受(一致习惯用2进制补码表示)。 (2)实数常量 包括定点实数与浮点实数两种表示形式。l 可以含有小数点的十进制的阿拉伯数字序列来表示,序列中不能含有逗号、空格等分节符,小数表示法中小数点前后都必须有数字。例如:123444567.000 合法 123,444,567.00
26、0 不合法 0.25 合法 .25 不合法l 前缀正号(+)或负号(-),用于表示实数的符号l 实数也可以科学计数法表示。当字符 E 或 e 出现在实数中时,意味着是乘以10的幂,中e前后都必须有数字,e可以大写成E,指数必须是整数。例如:7E-2表示的是7 * 10-2(7乘以10的 -2次幂),12.45e+6 和12.45e6都表示 12.45 * 106。(3)字符型常量l 字符类型数据的表示方法是用两个单引号括起单个字符如:A、6、 . 、 表示空字符。?如何表示字符 Im a student.(因为是一个特殊符号,必须用两个重复的符号来表示,可以表示一个的字符。)l 控制字符都由
27、# 号及紧随其后的无符号整型常量(0.255之间,10进制或16进制)组成并且表示相应的ASCII字符。 ? #65 #97 #13(4)字符串常量,由单撇号括起来的字符串,如:hello,abc123,3.234。l 引用串 ,由单撇号括起来的字符串,如: BORLAND BORLAND Youll see Youll see 空串 空格l 控制串是由一个或更多控制字符的序列,每个控制字符都由 # 号及紧随其后的无符号整型常量(0.255之间,10进制或16进制)组成并且表示相应的ASCII字符。 #89#111#117 等价于引用串 Youl 联合引用串与控制串以构成大的字符串。 Line
28、 1#13#10Line 2l 两个引用串不能通过这种方法连接。 HelloWorld HelloWorld (5)布尔型常数,只有两个值True和False。2. 符号常量符号常量是指一个被声明的标识符,它的值不能改变。如果在一个程序中,某一个常数反复多次出现,可以定义一个标识符来代表该常数。定义常量时使用常量说明语句,语法格式为:const=其中const是Object Pascal的保留字,表示常量定义的开始。即常量的标识符,是直接常量或常量组成的表达式。例如:constp=3.1415926;K=p/180;不能在程序中给常量另行赋值,否则会导致语法错误。3. 类型常量类型常量不同于符
29、号常量,它能保存数组、记录等高级数据类型的值。定义类型常量的语法格式如下:const:=;例如:constHello: string = Hello;Max: Integer = 100;Digits: array0.9 of Char = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); /定义了一个常量来保存数组在缺省的编译状态 J- 中,类型常量不能被赋予新的值,这时的类型常量相当于只读变量。然而,如果编译指示 J+ 有效,那么类型常量可以被赋予新的值,这时的类型常量相当于被初始化过的变量。编译指令的修改project|Options|Compiler|Assignable
30、 Typed Constants2.3.2 变量变量是程序代码中代表一个内存地址的标识符,而此地址的内存内容在程序代码执行时可以被改变。在使用变量前必须对它进行说明,即对它进行命名,并说明它的类型。变量就像数据容器,而且由于变量被定义了类型,只能用于储存与其定义类型相兼容的数据。变量有如下三个主要特征。(1)变量名:即变量的标识符,用于对所代表的内存单元的引用。(2)类型:变量的类型决定了变量中所存放数据的范围、有效的操作、存储空间的大小和格式。(3)变量值:变量所代表的内存单元中的数据值。注意:变量必须先声明才能使用。1. 变量的声明变量在单元、函数或过程的声明部分进行声明,声明位置决定了变
31、量的作用范围。unit Unit1;interfaceimplementation$R *.dfmfunctionbeginEnd;V1V2V3V1,V2都是全局变量,v3是局部变量。变量声明的格式为:var :;:;声明多个同类型的变量时可采用如下格式:var :;其中var是Object Pascal的保留字,表示变量定义的开始,可以是任意合法的标识符,可以是Object Pascal的基本数据类型也可以是由用户定义的高级数据类型。声明在过程或函数内部的变量有时叫做局部变量,而在应用程序开始声明的变量叫做全局变量。全局变量可以在声明时对它进行初始化,格式为:var :=其中常量表达式的值必
32、须与变量定义的类型相兼容。例如:var I: Integer; /声明了一个类型为Integer的变量I,类似地 X, Y: Real; /声明了类型为Real的两个变量X和Y。var X, Y, Z: Double; I, J, K: Integer; Digit: 0.9; /子界类型 Okay: Boolean;2. 变量使用变量经过声明之后,就可以在程序中使用了,通常可以通过赋值语句给变量赋值。如果没有明确初始化全局变量,那么编译器将对其初始化为0。不同的是,局部变量不能在其声明中被初始化,并且在其被赋值之前包含的是随机数据。一旦声明了一个变量,应及时对它赋值进行初始化,未经初始化的变
33、量的值是一个不确定的随机数,如果该变量参与运算或是出现程序流程中将会产生意想不到的后果。初始化变量的最简单方法就是给变量赋值。例如: X:=6.5; I:=9; Y:=15;2.4 运算符与表达式运算是对数据进行加工处理的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式是表示某个求值规则的运算公式,它由运算符和圆括号将常量、变量等操作数以合理的形式组合而成。表达式可以用来执行运算、操作或测试数据,每个表达式都会产生惟一的值。表达式的类型由运算符的类型决定。在Object Pascal 中有以下几种运算符:算术运算符、位运算符、字符串运算符、关系运算符、布尔运算符、集合
34、运算符、指针运算符、类运算符和运算符。本章中先介绍几种常用的运算符。2.4.1 算术运算符与表达式1. 算术运算符Object Pascal有个算术运算符,在这个算术运算符中,除取正“”、取负“”是单目运算符外,其他均为双目运算符,详见本教程P36页表2-9。运算符操作优先级范例+(一元)符号等同1+7-(一元)符号相反1-X+加3X + Y-减3Result - 1*乘2P * InterestRate/实数除2X / 2Div整数除2Total div UnitSizeMod取模2Y mod 6l 其中、运算的含义与数学中的相同,参加运算的数可以是整型也可以是实型,结果由Delphi自动向
35、精度高的数据类型转化。l 参加除法运算“”的数无论是整型或是实型,结果都是实型。l 参加整数除法“div”和求余运算“mod”的数必须是整型,结果也是整型,分别是除法的商和余数。余数符号与被除数相同。l 在表达式a/b 、a div b 、a mod b 中,如果b的值为0将会触发一个错误。例如:10 mod 3的值为1,10 div 3的值为3。2. 算术表达式算术表达式是由算术运算符、数值型常量、变量、圆括号组成,其运算结果为一数值。例如:3*4+(90-5)/4*2的值为54.5。在书写算术表达式时应当注意以下两点:l 在数学中可以省略乘号,但在算术表达式书写中不可以省略,如在数学中相乘
36、可以写成2x,但在编程中必须写成2*x;l 所有括号都用小括号(),括号必须配对,例如数学式3x+(y-z)在编程中必须写成3*(x+2*(y-z)。l 对于整型表达式,如果其中一个操作数是Int64类型,其运算结果是Int64类型;否则运算结果是Integer类型。如果一个操作数的类型是整数类型的子界,那么它将被视为整数类型。参加整数除法“div”和求余运算“mod”的数必须是整型,结果也是整型,分别是除法的商和余数。对于表达式x div y、x mod y,当 y 为零时将发生运行时错误。 例如:10 mod 3的值为1,10 div 3的值为3。l 实数参与的运算几乎都是近似运算。l 表
37、达式 x/y 的值始终是Extended类型,而不管 x 和 y 是何类型。对于其他算术运算符,只要至少其中一个操作数是实数,其运算结果就是Extended类型。l 表达式x/y,当 y 为零时将发生运行时错误。l 其中、运算的含义与数学中的相同,参加运算的数可以是整型也可以是实型,结果由Delphi自动向精度高的数据类型转化。3、算术运算符的优先级2.4.2 位运算符位运算符是指对操作数进行的按位逻辑运算。其运算对象是整数,运算结果也是整数,Object Pascal有6 个位运算符。l x shl y和x shr y实现的运算是将x的值向左或向右移动y位(bit),相当于x乘以或除以2的y
38、次幂,运算结果的类型与x相同。例如:N(01101)(十进制为13),N shl 1 (11010)(十进制为26)。? N shr 1的结果是多少?l not x,x shl y,x shr y类型与x的类型相同l x and y,x or y,x xor y类型为x与y的类型中值的范围小的类型。l and、or、not和xor运算符当运算符两侧为数值数据,则将数值数据转换为二进制数(补码形式)进行按位运算。运算符操作操作数类型结果类型范例Not按位否定整数整数not XAnd按位与整数整数X and YOr按位或整数整数X or YXor按位异或整数整数X xor YShl按位左移整数整数
39、X shl 2Shr按位右移整数整数Y shr I设x值为3,y值为5,在内存中按二进制保存,即x,y值分别为00000011,00000101。按位计算结果如下:not x 的值为 11111100 (十进制数 4)x and y 的值为 00000001 (十进制数 1)x or y 的值为 00000111 (十进制数 7)x xor y 的值为 00000110 (十进制数 6)x shl y 的值为 01100000 (十进制数 96)x shr y 的值为 00000000 (十进制数 0)2.4.3 字符串运算符 Object Pascal只有一种字符串运算符,即连接运算符“+”
40、。该运算符用于连接两个或更多的字符串。 当两个字符串用连接运算符连接起来后,第二个字符串直接添加到第一个字符串的尾部,结果是一个更长的包含两个字符串的全部内容的字符串,也可以把多个字符串连接起来,每两个字符串之间都要用“+”号分隔。例如:abcdef+123 连接后结果为:abcdef123abc+123+xyz 连接后结果为:abc123xyzl (+)运算符的操作数可以是串、压缩串(Char类型的压缩数组)或字符。然而,如果其中一个操作数是WideChar类型,那么另一个操作数必需是一个长串。l (+)运算符对串运算的结果类型与任意串类型兼容。然而,如果操作数都是短串或字符,而它们连接后的
41、长度大于255,那么运算结果将只保留前255个字符,将多余的部分截去。l 加号(+)运算符对串的操作与其对数字的操作有很大差异。对于数字a、b,表达式a + b与b + a是等价的,对于字符串s1、s2表达式s1 + s2与s2 + s1不是等价的。例如,当s1为hello、s2为world时,s1 + s2返回的值是helloworld,而s2 + s1返回的值是worldhello。也就是说,当加号(+)作为字符串运算符时,操作数的位置顺序直接影响运算结果。l 对串进行索引,如果S是一个串变量,i是一个整数表达式,那么Si表示串S中第 i 个字符或者直接地说是S中的第i个字节。n 对Sho
42、rtString或AnsiString,Si是AnsiChar类型;n 对WideString,Si是WideChar类型。例如:语句 MyString2 := A; 把值 A 赋给MyString的第二个字符。2.4.4 关系运算符关系运算符用于比较两个操作数。关系运算符 =、= 也适用于集合;= 和 也适用于指针(见指针运算符)。运算符操作操作数类型结果范例=相等简单类型、类、类引用、接口、串、压缩串BooleanI = Max不等简单类型、类、类引用、接口、串、压缩串X Y小于简单类型、串、压缩串、PCharX 大于简单类型、串、压缩串、PCharLen 0=小于或等于简单类型、串、压缩串、PCharCnt =大于或等于简单类型、串、压缩串、PCharI = 1用关系运算符把两个运算对象连接起来表示它们大小关系的式子称为关系表达式。关系运算符的运算规则:l 除实数和整数可以比较之外,用于比较的操作数必须类型兼容。串的比较依照扩展ASCII字符集的顺序;字符类型被视为长度为1的串。串的比较由定义为串中相应位置字符顺序比较。 l 对于整型数据,比较是直接进行的。例如,当I和J具有相同的值是,I = J为True,否则I J为True。 关系表达式的一般格式及其功能如下。格式:表达式1 关系运算符 表