Нетипизированные параметры
Когда формальный параметр является нетипизированным парамет- ром-переменной, то соответствующий фактический параметр может представлять собой любую ссылку на переменную или константу, не- зависимо от ее типа. Нетипизированный параметр, описанный с клю- чевым словом 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<size) and (Bytes(dest)[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.
Хотя нетипизированные параметры дают вам большую гибкость, их использование сопряжено с некоторым риском. Компилятор не мо- жет проверить допустимость операций с нетипизированными перемен- ными.