声明参数时使用array of type(而不是array[X..Y])。
function Find(A: array of Char): Integer;
声明了一个叫做Find的函数,它接收任意长度的字符数组并返回一个整数。
注意:开放数组参数的语法和声明动态数组相似,但它们的意义不同。上面的例子创建了一个函数,它可以接收由字符构成的任何数组,包括(但不限于)动态数组。对于必须是动态数组的参数,你需要指定一个类型标志符:
type TDynamicCharArray = array of Char;
function Find(A: TDynamicCharArray): Integer; 关于动态数组的信息,请参考Dynamic arrays。
在例程体(body)中,开放数组参数遵循下列规则:
? 元素的下标总是从0开始,第一个是0,第二个是1,依此类推。标准函数Length-1。SizeOf函数返回传给例程的实际数组的大小; ? 它们只能通过元素进行访问,不允许给整个开放数组赋值;? 它们只能被当作开放数组参数或无类型var参数传给其它过程和函数,它们不能传给数;
? 你可以传递一个变量而不是数组,变量的类型就是开放数组的基础类型,它被当作一个长度为数组。
当把一个数组当作开放数组数值参数传递时,编译器在例程的堆栈结构(拷贝,传递大数组时要当心堆栈溢出。
下面的例子使用开放数组参数定义了一个Clear过程,它把数组中的每个实数元素赋Sum函数,它计算实数数组的元素之和。
procedure Clear(var A: array of Real); var
I: Integer; begin
for I := 0 to High(A) do A[I] := 0; end;
function Sum(const A: array of Real): Real; var
I: Integer; S: Real; begin S := 0;
for I := 0 to High(A) do S := S + A[I]; Sum := S; end;
当调用使用开放数组参数的例程时,你可以向它传递开放数组构造器。Variant open array parameters(Variant开放数组参数)Variant开放数组参数允许你向一个过程或函数传递由不同类型的元素构成的数组。要定义这样一个例程,指定array of const作为参数的类型,这样
procedure DoSomething(A: array of const);
声明了一个叫做DoSomething的过程,它能接收不同类型的数组。array of const结构等同于array of TVarRec。TVarRec在SystemLow和High返回0和
SetLength函
1的
stack frame)中创建一个本地0;还定义了一个
- 91 -
单元定义,表示一个拥有变体部分的记
Procedures and functions
录,它能存储整数、布尔、字符、实数、字符串、指针、类、类引用、接口和变体类型的值。TVarRec记录的VType字段指示数组中每个元素的类型。一些类型以指针而不是以数值形式进行传递,特别是,长字符串以指针类型传递,必须被转换为string。
下面的函数使用Variant开放数组参数,它把传给它的每个元素用字符串表示,并把它们连接成一个单一的字符串。函数中使用的字符串处理例程在SysUtils单元定义。
function MakeStr(const Args: array of const): string;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-65.html
你余杭那些地哪里来的
但这是没有什么用的
你是最棒的
绝逼有水军煽动