是内置于编译器的,有着特殊的用途。)
Declaring variables(声明变量)
Declaring variables(声明变量)
声明一个变量的基本语法是
var identifierList: type;
这里,identifierList是由逗号隔开的有效标志符的列表,type是任何有效类型。比如,
var I: Integer;
声明一个整数类型的变量I,而
var X, Y: Real;
声明两个变量X和Y,它们是实数(Real)类型。
连续的变量声明没必要重复使用关键字var:
var
X, Y, Z: Double;
I, J, K: Integer;
Digit: 0..9;
Okay: Boolean;
有时,在过程或函数中声明的变量叫做局部变量,而其它变量叫做全局变量。全局变量能在声明时进行初始化,使用语法
var identifier: type = constantExpression;
这里,constantExpression是任何type类型的常量表达式。所以下面的声明
var I: Integer = 7;
相当于声明和语句
var I: Integer;
...
I := 7;
同时声明多个变量(比如var X, Y, Z: Real;)时不能包括初始化,
- 72 - VariantSelf和Result)单元的副本。若你知道自己在做什么,你 和文件类型的变量声明也不能
Data types, variables and constants
初始化。
如果你没有明确地初始化一个全局变量,编译器把它初始化为0。相反,不能在声明局部变量时进行初始化,它们的值是随机的,直到赋给它们一个值。
当你声明变量时,你正在分配内存,当变量不再使用时,这些内存会自动释放。特别是局部变量,它们只存在于程序退出(声明它们的)函数或过程之前。关于变量和内存管理的更多信息,请参考Memory management。
Absolute address(绝对地址)
你可以创建一个新变量,它和另一个变量在内存的同一个位置。要这样做的话,声明这个新变量时在类型名的后面跟关键字absolute,后面再跟一个已存在(先前声明)的变量。比如,var
Str: string[32];
StrLen: Byte absolute Str;
指定变量StrLen从Str的地址开始。因为短字符串的第一个字节包含字符串的长度,的长度。
使用absolute声明时不能初始化变量,也不能组合其它指示字(和Dynamic variables(动态变量)
你可以调用GetMem或New过程来创建动态变量,你创建了这样一个变量,你要负责在最后释放它的内存。使用使用Dispose释放由New创建的变量。其它能作用于动态变量的标准例程包括StrAlloc和StrDispose。
虽然长字符串、宽字符串、动态数组、Variants以及接口也是在堆中分配的动态变量,但它们的内存是自动管理的。
Thread-local variables(线程局部变量)线程局部变量(或线程变量)用于多线程应用程序。线程局部变量类似于全局变量,除了执行的每个线程有自己的这些变量的拷贝,不能从其它线程访问它们。声明线程局部变量时,使用是var,比如,
threadvar X: Integer; 线程变量声明
? 不能出现在过程或函数中 ? 不能包含初始化
? 不能指定absolute指示字
不能创建指针或过程类型的线程变量,也不能在动态调入库中使用线程变量(除了包)由编译器管理的动态变量,即长字符串、宽字符串、动态数组、但编译器不能自动释放由每个线程创建的堆内存。若你使用这些类型的线程变量,你要负责释放它们的内存。比如,
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-51.html
自己什么都不需要担心
任何工业品都有设计使用寿命
谢谢您