根据Delphi在线帮助,绘制了如下的全家福,所有数据类型都按照各自的辈分站好了位置。
1、Ordinal有序类型
Object Pascal将Ordinal和Real归类于Simple(简单)旗下。
Integer基本类型是Integer和Cardinal,它们都是32位的,操作系统和CPU可以花费最少的时间处理它们。
Character基本类型是Char,AnsiChar和Char是等同的,都是用来处理8位字符(单字节字符),而WideChar用来处理多字节字符(Delphi7实现为16位,即2个字节)。
Boolean基本类型是Boolean,另外三种都是为了兼容而定义的。Boolean和ByteBool都是占用1个字节,而WordBool和LongBool分别占据2个字节和4个字节。
Enumerated枚举类型定义一系列有序值的集合,集合中的元素一般从0开始连续索引。
Subrange子界类型也是定义了一系列有序值的集合,但是子界的有序值必须是在别的有序类型中定义过的。子界中有序值的索引被基类确定。
2、Real实数类型
Real属于Simple大类,但是因为无理数的介入,使得Real不在能够有序,比如1.0和1.2之间可以取无限个数,因此1.15的确定顺序就不存在了。
Real的基本类型是Real,在Delphi7中Real等同于Double,因此建议用Double和Single来声明变量,而在过程或函数中需要定义可以传递任意实数的参数时,常使用Extended,因为它的取值范围最大,可以兼容其他所有实数类型。
3、String字符串类型
String类型分为ShortString、AnsiString/LongString、WideString三大类,ShortString在内存中占0..255字节,其中第0字节存储字符串的实际长度,因此一个ShortString类型的变量最多存储255个字符。
AnsiString/LongString/WideString的内存都是动态分配的,最大可至2GB,因此可以近似认为它们是无限长的。AnsiString包含的字符使用单字节存储的,而WideString包含的字符则是用多个字节存储的。在Delphi7中WideString被实现为用2个字节存储一个字符。
PChar并不是Pascal的标准类型,而是为了与操作系统和其他语言兼容而设置的,PChar声明一个以空字符(NULL字符)结尾的字符串指针,更准确的说,这个字符串的字符是Char类型,也就是PChar指向一个Char串。
4、Structured构造类型
Structured类型可以包含多个元素或字段,因而这种类型的变量能够容纳多个值。
Set类型的基本类型可以是Enumerated和Subrange,因此Set变量容纳的实际上是有序值。
Array数组类型包含两种性质,静态数组和动态数组。
Record记录类型,是多个任意元素的集合,其中的元素可以称为记录的字段。
File文件类型用来读写文本,在面向对象编程中,一般使用TFileStream类和一些类的(TStrings、TPicture、TBlobField、TTreeView等)的LoadFromFile、SaveToFile方法来操作文件。
构造类型中还包括Class(类)、Interface(接口)、Class reference(类引用)三种子类型。
5、Pointer指针类型
Pointer指针类型,一个指针占用4字节空间,一个指针就是一个4字节大小的内存块,该内存块的4字节空间用来存储另一块内存区所在的地址,这另一块内存区才是存储实际数据的地方。指针分为无类型指针(Untyped Pointer)和有类型指针(Typed Pointer)。
Procedural过称类型,一种比较特殊的类型,这种类型变量可以存取一个过程或函数。
6、Variant可变类型
可以存储绝大部分不同类型的数据。
Tip
在程序编写过程中,要尽量可能选择简单、轻量级、易懂的数据类型,而非实际需要,不要使用复杂的数据类型或者自定义类型,最简单的才是最美丽的。