在过程体或函数体中,无类型参数和每个类型都不兼容。要对一个无类型参数进行操作,你必须对它进行转换。通常,编译器不会对无类型参数检验它的有效性。
下面的例子在Equal函数中使用无类型参数,这个函数比较两个参数中指定数目的字节。
function Equal(var Source, Dest; Size: Integer): Boolean;
type
TBytes = array[0..MaxInt - 1] of Byte;
var
N: Integer;
begin
N := 0;
while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do
Inc(N);
Equal := N = Size;
end;
给定下面的声明
type
- 89 -
Procedures and functions
TVector = array[1..10] of Integer;
TPoint = record
X, Y: Integer;
end;
var
Vec1, Vec2: TVector;
N: Integer;
P: TPoint;
你可以如下调用Equal:
Equal(Vec1, Vec2, SizeOf(TVector)) // 比较Vec1和Vec2
Equal(Vec1, Vec2, SizeOf(Integer) * N) // 比较Vec1和Vec2的前N个元素
Equal(Vec1[1], Vec1[6], SizeOf(Integer) * 5) // 比较Vec1的前5个元素和后5个元素
Equal(Vec1[1], P, 4)// 比较Vec1[1]和P.X、Vec1[2]和P.Y
String parameters(字符串参数)
About string parameters(关于字符串参数)
当例程使用短字符串(short-string)参数时,在声明时不能指定它们的长度。也就是说,声明 procedure Check(S: string[20]); // 语法错误
产生编译错误。但是
type TString20 = string[20];
procedure Check(S: TString20);
是有效的。特殊标志符OpenString能用于声明可变长度的短字符串参数:
procedure Check(S: OpenString);
当编译器指示字{$H-}和{$P+}都起作用时,在声明参数时关键字string等同于OpenString。
短字符串、OpenString、$H和$P是为了向后兼容性。在新代码中,使用长字符串来避免这种情况。 Array parameters(数组参数)
Array parameters: Overview(概述)
当例程使用数组参数时,你不能在声明参数时包含索引说明符。也就是说,声明
procedure Sort(A: array[1..10] of Integer); // 语法错误
产生编译错误,但
type TDigits = array[1..10] of Integer;
procedure Sort(A: TDigits);
是有效的。但在大多数情况下,开放数组参数是更好的办法。
Open array parameters(开放数组参数)
开放数组参数允许传递不同大小的数组到同一个过程或函数。要定义一个使用开放数组参数的例程,在- 90 -
Procedures and functions
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-64.html
我会对美国说关你鸟事
半夜堵在高速路上
谁告诉你北洋没有一发炮弹击穿击穿主装甲
好可爱