Когда формальный параметр является нетипизированным парамет-
ром-переменной, то соответствующий фактический параметр может
представлять собой любую ссылку на переменную или константу, не-
зависимо от ее типа. Нетипизированный параметр, описанный с клю-
чевым словом var, может модифицироваться, а нетипизированный па-
раметр, описанный с ключевым словом const, доступен только по
чтению.
В процедуре или функции у нетипизированного параметра-пере-
менной тип отсутствует, то есть он несовместим с переменными всех
типов, пока ему не будет присвоен определенный тип с помощью
присваивания типа переменной.
Приведем пример нетипизированных параметров-переменных:
function Equal(var source,dest; size: word): boolean;
type
Bytes = array[0..MaxInt] of byte;
var
N: integer;
begin
N := 0;
while (N Bytes(source)[N]
do Inc(N);
Equal := N = size;
end;
Эта функция может использоваться для сравнения любых двух
переменных любого размера. Например, с помощью описаний:
type
Vector = array[1..10] of integer;
Point = record
x,y: integer;
end;
var
Vec1, Vec2: Vector;
N: integer;
P: Point;
и вызовов функций:
Equal(Vec1,Vec2,SizeOf(Vector))
Equal(Vec1,Vec2,SizeOf(integer)*N)
Equal(Vec[1],Vec1[6],SizeOf(integer)*5)
Equal(Vec1[1],P,4)
сравнивается Vес1 с Vес2, сравниваются первые N элементов Vес1 с
первыми N элементами Vес2, сравниваются первые 5 элементов Vес1 с
последними пятью элементами Vес2 и сравниваются Vес1[1] с Р.х и
Vес2[2] с P.Y.
Хотя нетипизированные параметры дают вам большую гибкость,
их использование сопряжено с некоторым риском. Компилятор не мо-
жет проверить допустимость операций с нетипизированными перемен-
ными.