相关文章推荐
从容的路灯  ·  Delphi ControlBar ...·  1 周前    · 
聪明的作业本  ·  delphi ...·  1 周前    · 
风流的日记本  ·  delphi nethttpclient ...·  1 周前    · 
风度翩翩的凳子  ·  交通拥挤_百度百科·  1 年前    · 
光明磊落的蚂蚁  ·  ibm740新款- ...·  1 年前    · 

动态数组之使用指针

传统的

Pascal

语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定

数组元素的个数。

专业程序员也许知道些许动态数组的实现技术,

一般是采用指针,

用手工分配

并释放所需的内存。

Delphi 4

中增加了非常简单的动态数组实现方法,实现过程效仿我前面讲过的动态长字符

串。与长字符串一样,动态数组的内存动态分配并且引用记数,不过动态数组不支持

copy-on-write

技术。这不是个大问题,因为你可以把变量值设置为

nil

释放数组内存。

这样你就可以声明一个不指定元素个数的数组,

并用

SetLength

过程给数组分配一个特定

大小的内存,

SetLength

过程还可以改变数组大小而不影响其内容,除此外还有一些字符串过

程也可用于数组,如

Copy

函数。

以下摘录的代码突出了一点,这就是:定义数组后必须先为它分配内存,然后才能开始使

用:

procedure

TForm1.Button1Click(Sender: TObject);

var

Array1:

array of

Integer;

begin

Array1 [1] := 100;

// error

SetLength (Array1, 100);

Array1 [99] := 100;

// OK

...

end

;

如果你只定义一个数组元素个数,

那么索引总是从

0

开始。

Pascal

中的普通数组既能用不

为零的下标,也能用非整数的下标,但动态数组均不支持这两种下标。

象普通数组一样,你可以

通过

Length

High

Low

函数了解到动态数组的状况,不过对于动态数组,

Low

函数返回

值总是

0

High

函数返回数组大小减

1

,这意味着空的动态数组其函数

High

返回值是

-1

,这

是一个很怪的值,因为它比

Low

的返回值还小。

8.1:

DynArr

窗体

以上作了简短的介绍,现在举个简例,例名

DynArr

,见图

8.1

。例子实在是很简单,其

实动态数组没有什么特别复杂地方。

我想通过该例说明几个程序员可能犯的错误。

程序中声明了

两个全程数组并在

OnCreate

事件中初始化了第一个数组:

var

Array1, Array2:

array of

Integer;

procedure

TForm1.FormCreate(Sender: TObject);

begin

// allocate

SetLength

(Array1, 100);

end

;