Delphi 变量和常量


本文整理自网络,侵删。

 

#### 1. 概述

 

最初的Pascal 语言是以一些简单的概念为基础建立起来的,这些概念现在普遍出现在编程语言中。最重要的概念当属数据类型,数据类型决定了变量可取的值,以及可在这些值上进行的操作。Pascal 数据类型的概念强于C语言及早期的BASIC语言,在C语言中算术数据类型是可以互换的,而早期的BASIC语言中根本没有与数据类型相似的概念

 

#### 2. 变量

 

Pascal 变量在使用前必须声明,声明变量时必须指定一种数据类型。下面是变量声明的例子:

 

```pascal

var

  Value: Integer;

  IsCorrect: Boolean;

  A, B: Char;

```

 

关键字var可以在许多地方使用,例如放在函数或过程的开始部分,用来声明函数或过程的局部变量;也可以放在单元中,用于声明全程变量。var关键字之后是一组变量名列表,每个变量名后跟一个冒号和数据类型名,一行中可以声明多个变量,如上例中最后一句。

 

一旦变量的类型被指定,你只能对变量执行该变量类型支持的操作。例如,在判断操作中用布尔值,在数字表达式中用整型值,你不能将布尔值和整型值混用(在C语言中可以这样)。

 

使用简单的赋值语句,可写出下面的代码:

 

```pascal

Value := 10;

IsCorrect := True;

```

但下面的语句是不正确的,因为两个变量数据类型不同:

 

```pascal

Value := IsCorrect; // error

 

```

 

在Delphi中编译这句代码,会出现错误信息:Incompatible types: 'Integer' and 'Boolean'.(类型不兼容:‘整型’和‘布尔型’)。象这样的错误通常是编程错误,因为把一个 True 或 False 的值赋给一个整型变量没有什么意义。你不该责怪Delphi 提示这样的错误信息,代码中有不对的地方Delphi当然要提出警告。

 

把变量的值从一种类型转换到另一种类型往往不难做到,有些情况下类型转换会自动实现,不过一般情况下需要调用特殊的系统函数,通过改变数据内部表示来实现类型转换。

 

在Delphi 中,当你声明全程变量时,你可以赋给它一个初值。例如,你可以这样写

 

```pascal

var

  Value: Integer = 10;

  Correct: Boolean = True;

```

 

这种初始化方法只能用于全程变量,不能用于过程或方法的变量。

 

 

#### 3. 常量

 

对于在程序运行期间保持不变的值,Pascal 允许通过常量来声明。声明常量不必特定数据类型,但需要赋一个初值。编译器会根据所赋初值自动选用合适的数据类型。例如:

 

```pascal

const

  Thousand = 1000;

  Pi = 3.14;

  AuthorName = 'Marco Cantù';

```

 

Delphi 根据常量的值来决定它的数据类型。上例中的Thousand 变量,Delphi会选用SmallInt数据类型 (短整型--能容纳Thousand变量的最小整数类型)。如果你想告诉Delphi 采用特定的类型,你可在声明中加入类型名,方法如下:

 

```pascal

const

  Thousand: Integer = 1000;

```

 

对于声名的常量,编译器有两种编译选择:第一种为常量分配内存,并把常量的值放入内存;第二种在常量每次使用时复制常量值。第二种方法比较适合简单常量。

 

> 注意:16位的Delphi 允许你在程序运行期间改变已定义的常量值,就象一个变量一样。32位的Delphi为了向后兼容仍容许这种操作,只要你附加 $J 编译指令,或选择工程选项对话框中Compiler (编译器) 页的Assignable typed constants复选框就行。尽管如此,这里我还是要强烈建议万不得以不要使用上述操作,因为把新值赋给常量将使编译器不能对常量进行优化,与其如此不如直接声明一个变量。

 

##### 3.1. 资源串常量

 

当定义字符串常量时,你可这样写:

 

```pascal

const

  AuthorName = 'Marco Cantù';

```

 

从Delphi 3 开始,你可以用另一种方式写:

 

```pascal

resourcestring

  AuthorName = 'Marco Cantù';

```

 

上面两个语句都定义了一个常量,也就是定义了一个在程序运行期间保持不变的值,但两者的实现过程却不同,用resourcestring 指令定义的字符串变量将被保存到程序资源的字符串表中。从例子ResStr你可了解资源串的实际作用,例子中设置了一个按钮, 相应代码如下:

 

```pascal

resourcestring

  AuthorName = 'Marco Cantù';

  BookName = 'Essential Pascal';

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  ShowMessage (BookName + #13 + AuthorName);

end;

```

 

以上代码中的两个字符串将分两行输出显示,因为字符串被分行符 #13 隔开。

 

有趣的是,当你用资源编辑器打开执行文件时,你会在程序资源中看到你所定义的字符串。这意味着字符串并没有进入编译代码,而是保存在执行文件 (EXE文件) 的一个单独区域。

 

> 注意:简而言之,采用资源的好处一方面可让Windows 来完成有效的内存处理,另一方面不用更改源代码就可实现程序的本地化 (把字符串翻译成不同的语言)。

 

来源:http://www.coder163.com/language/delphi/

相关阅读 >>

Delphi求解一元二次方程

Delphi idhttp多线程下载

Delphi实现win10下Delphi 10.3.1 inline hook 修改mac网卡地址之getadaptersaddresses

Delphi 用拼音首字符检索汉字的源代码

Delphi tfilestream 逐行读取文本

线程池的概念

Delphi 检测网络是否连通

Delphi 在windows右键菜单中加上关联

Delphi 进程程序多开调用单元

Delphi wininet带进度下载http文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...