一、开放数组参数
可以将大小不确定的数组传递给一个函数或过程,这样传递的数组参数称为开放数组参数
开放数组参数必须注意的几点:
1.如果过程或函数中某个参数为开放数组参数,则一般使用下面的声明方式:
function Sum(Const A : Array of Integer): Integer;
使用此方法声明动态数组参数时,只要传入函数或过程的数组的基类型都是类型名所指定的类型即可,数组本身既可以为动态数组也可以为静态数组。如果必须指明只能传入动态数组则使用形式:
type TDynArr = array of Char;
procedure Proc(Arr: TDynArr);
2.如果函数或过程的形式参数表中含有开放数组参数,则在函数体中只能访问对应数组元素,而不能访问整体数组,例如,不能对数组进行整体赋值。
3.通过开放数组参数传入的实际数组的下标索引总是从0开始。为避免数组访问错误,我们可以使用Low/High/SizeOf函数检测数组下标的上下界和数组大小。
4.如果函数或过程的形式参数表中含有开放数组参数,则在调用该函数或过程时,实际参数可以为与开放数组基类型相同的变量,此时变量长度为1的数组。
5.当调用含有开放数组参数的函数或过程时,编译器要在栈中开辟一片存储区复制整个数组元素。因此数组不能太大,以免造成溢出。
6.当过程或函数体内嵌套其他过程或函数时,该参数可以作为局部变量传递给内层的函数或过程,但内层函数或过程对应的形式参数是开放数组参数或无类型变量参数。
7.当调用具有开放数组参数的函数或过程时,可以直接使用开放数组构造器(open array constructor)构造数组。eg:
二、可变开放数组参数
传递的数组中元素的类型可变,数组大小可变。
声明方式:
function FUN(Args: array of const):string;//其中array of const 等价于array of TVarRec (变体记录类型)
内容均出自 《参透delphi》 乔林著 中国铁道出版社