第三章 数据类型 Types
一、主要有八种数据类型:
-
简单类型 simple tye
-
字符类型 string type
-
结构化类型 structured type
-
指针类型 pointer type
-
过程类型 procedural type
-
泛型类型 generic type
-
专用类型 specialized type
-
类型别名 type alias
二、基本类型
基本类型分为序数类型与实数类型两大类。
1.序数类型 ordinal types
除浮点类型外,所有基本类型均为序数类型,可分为整数类型、布尔类型、枚举类型、子界类型。
1.1 整数类型 integers
1.2 布尔类型 boolean types
1.3 枚举类型 enumeration types
1.4 子界类型 subrage types
2、实数类型
Free Pascal仅支持IEEE浮点类型,使用数学协处理器处理浮点计算。Real类型在本机上可以是Single或是Double类型,取决于本机处理器。
类型 | 范围 | 有效位数 | 字节 |
依赖平台 | |||
二、字符类型 character types
1.Char类型
一个字符一个字节,包含一个ASCII字符。
Char类型通过将字符括在单引号中来指定字符常量,如’a’ ‘A’
2.WideChar
2个字节大小。包含UTF-16编码的Unicode字符,在UTF-16编码前加#实现。
3.其它字符类型
Free Pascal在系统单元中定义了其他一些字符类型,例如UCS2Char,UCS4Char,UniCodeChar。但是这些字符类型仅出于Delphi兼容性而定义。
4.单字节字符串类型 Single-byte String types
4.1 Short String
4.2 Ansistring
4.3 RawByteString
1.RawByteString类型是不带代码页信息(CP_NONE)的AnsiString字符串类型
2.系统和Sysutils单元中的大多数单字节字符串都使用RawByteString类型。
Var:
RawByteString = Type Ansistring(CP_NONE)
4.4 UTF8 字符串
单字节代码页字符串只能存储该代码页中可用的字符,代码页中不存在的字符不能用该字符串表示。
UTF-8中的ASCII字符映射到CP_ACP编码
Var:
UTF8String = Type AnsiString(CP_UTF8)
5. 多字节字符串类型 Multi-byte String types
5.1 UnicodeString
与AnsiString类似:引用计数,以null结束的数组
5.2 WideString
WideString的类型(用来表示在COM应用程序的unicode字符串)与UnidecodeString几乎相同。
6.Pchar : Null terminated strings
PChar被定义为指向Char类型的指针,但允许进行其他操作。
最好将PChar类型理解为C样式的以null终止的字符串的Pascal等效项,即PChar类型的变量是一个指向Char类型的数组的指针,该数组以null字符(#0结束)。
三、结构化数据类型 Structured Types
结构化类型是可以在一个变量中包含多个值的类型。
结构化类型可以嵌套到无限级别。
与Delphi不同,Free Pascal中不是所有的结构化类型都支持关键字Packed。
结构化数据类型有:数组、记录、集合、文件
FPC支持一维数组、多维数组、压缩数组和动态数组
3.1静态数组
数组的范围包含在数组定义中。
访问索引超出声明范围的元素将生成运行时错误(如果启用了范围检查)。
Type
RealArray = Array [1..100] of Real; //有效索引在1到100之间,包括1和100。
以下两种声明等同
Type
APoints = array[1..100] of Array[1..3] of Real;
Type
APoints = array[1..100,1..3] of Real;
有效索引在1到100之间,包括1和100。
以下两种声明等同
Type
APoints = array[1..100] of Array[1..3] of Real;
Type
APoints = array[1..100,1..3] of Real;