Delphi 编程/数据类型
首先,让我们定义一个类型。
在 Delphi 中,像在 C、VB 以及与 PHP、Python 或其他现代语言不同的是,一个变量是类型化的,并且只能包含此类型的值。为了简单起见,类型是变量的一个属性。
Delphi 在这方面非常完善。存在许多预定义类型,您也可以创建自己的类型(我们将在后面看到)。以下是一张包含最有用基本类型(也称为原始类型)的表格
类型 | 描述 | 大小 | 值 |
---|---|---|---|
boolean | boolean | 1 位 | True/False |
char | 字符 | 1 字节 | ASCII 表(或 ANSI)中的一个项 |
string | 字符序列 | 取决于其字符数 | ASCII 表(或 ANSI)项的动态表 |
integer | 正整数或负整数 | 4 字节 | -2147483648 到 2147483647 |
cardinal | 无符号整数 | 4 字节 | 0 到 4294967295 |
real(等效于 double) | 实数 | 8 字节 | 5.0 x 10^-324 到 1.7 x 10^308 |
- 备注:以上仅是最流行的预定义类型。仅针对整数类型就有数十种其他类型(smallint、longint、int64...),它们的用途满足非常具体的需要(例如我们将放入的数据的大小),从而优化了内存使用。有关此方面的更多信息,请参阅 Delphi 帮助内容中的文档。
一个 char(一个字符)类似于 '#', 'A', '2', ';', '.', '?' 等等。它在 char 库(ASCII)中有一个数字。在 Delphi 中,char 用两个单引号括起来。如果给定的字符是单引号本身,则应将该字符加倍,换句话说,您必须输入四个单引号。
var
a, b: char;
begin
a := 'H'; // a = "H"
b := 'i'; // b = "i"
WriteLn(a); // Display "H"
WriteLn(a, b); // Display "Hi"
WriteLn(a, b, '!'); // Display "Hi!"
end.
您已经在上一章中使用过字符串,例如 'Hello World' 或 'Hi there' 等等。字符串是 char 的序列。
var
text1: string;
character1: char;
然后在 begin 和 end 之间写入
character1 := 'H';
text1 := 'ello World!';
WriteLn(character1, text1);
如果要在字符串中写入单引号,最佳方法是键入两个连续的单引号
text1 := 'I''m John Doe.';
字符串的行为类似于表格。可以使用索引访问字符
text := 'Hello World!';
WriteLn(text[1]); // Only print "H".
第一个索引是 1(而不是 0)。
可以使用 + 运算符链接字符串
firstWord := 'Hello';
secondWord := 'World';
WriteLn(firstWord + ' ' + secondWord + '!');
wholeText := firstWord + ' ' + secondWord + '!';
+ 运算符可以与不同类型的变量一起使用。根据类型,结果将具有不同的类型
- string + string → string
- string + char → string
- char + char → string
- char + string → string
- string + number → 错误
- number + string → 错误
- number + number → number
- number + char → 错误
- char + number → 错误
整数是偶数,您可以编写
a: Integer;
浮点数是十进制数。它们使用 浮点。您可以编写
c: Real; // Real is normally the same like Single
a: Single;
b: Double;
d: Extended;
Extended 比 Real 更精确,但需要更多的主存储空间。
布尔值是一个逻辑值。它可以是 'True' 或 'False'。编写
var
a: Boolean;
begin
a := True;
// or
a := False;
但是,只有在您了解下一章中的条件结构时,布尔值才有意义。
数组是字符串、浮点数、整数或任何数据类型的集合。它也可以包含一个数组。在这种情况下,我们有一个具有多个维度的数组。您可以说
a: array [from..to] of data_type;
→ a: array [1..3] of string;
对于一维。对于二维
a: array [fX..tX] of
array [fY..tY] of data_type;
等等。数组的一个元素例如是
a[1] := 'Hello '
a[2] := 'World'
a[3] := '!';
WriteLn(a[1],
a[2],
a[3]);
记录(在其他语言中也称为结构)表示一组异构数据。每个项目都是一个字段。记录类型声明指定每个字段的名称和类型。按照惯例,记录类型的名称以 "T" 开头。记录类型声明具有以下语法
type recordTypeName= record
listField1: type1;
...
listFieldn: typen;
end
例如,以下声明创建了一个名为 TDateRec 的记录类型。
type
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end;
每个 TDateRec 包含三个字段:一个名为 Year 的整数值、一个名为 Month 的枚举值以及另一个介于 1 和 31 之间的名为 Day 的整数值。标识符 Year、Month 和 Day 是 TDateRec 字段的名称,其行为类似于变量。但是,TDateRec 类型声明不会为 Year、Month 和 Day 字段分配内存。当您实例化一个记录时,内存将被分配,您需要执行以下操作
var Record1, Record2: TDateRec;
变量声明创建了两个 TDateRec 实例,分别称为 Record1 和 Record2。
可以使用记录名称限定字段名称来访问记录字段
Record1.Year := 1922;
Record1.Month := Nov;
Record1.Day := 26;
或者使用 with
指令
with Record1 do
begin
Year := 1922;
Month := Nov;
Day := 26;
end;
以下示例提出一个问题,获取答案并打印答案
var
_Input, _Linkage: string;
begin
WriteLn('Hello, what is your name?');
ReadLn(_Input);
_Linkage := 'Hello, ' + _Input;
WriteLn(_Linkage);
end.
ReadLn(_Input)
表示应用程序等待用户输入文本,然后将文本保存在变量 _Input
中。
以下另一个示例获取 ASCII 中字符的数字
var
number: Integer; // Declare number as an integer
_Input: string;
_Char1: char;
begin
WriteLn('Enter a char!');
ReadLn(_Input);
_Char1 := _Input[1];
number := Ord(_Char1);
WriteLn('ASCII is: ', number);
end.
使用 _Input[1] 获取 _Input 的第一个字符。第一个字符是字符 1(不是像 C++ 中的字符 0!)