Delphi 之动态数组使用总结 传统的 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 的返回值还小
1: 例 DynArr 窗体 以上