Параметры-переменные
Параметр-переменная используется, когда значение должно пе- редаваться из процедуры или функции вызывающей программе. Соот- ветствующий фактический параметр в операторе вызова процедуры или функции должен быть ссылкой на переменную. При активизации проце- дуры или функции формальный параметр-переменная замещается факти- ческой переменной, любые изменения в значении формального пара- метра-переменной отражаются на фактическом параметре.
Внутри процедуры или функции любая ссылка на формальный па- раметр-переменную приводит к доступу к самому фактическому пара- метру. Тип фактического параметра должен совпадать с типом фор- мального параметра-переменной (вы можете обойти это ограничение с помощью нетипизированного параметра-переменной).
Примечание: Файловый тип может передаваться только, как параметр-переменная.
Директива компилятора $P управляет смыслом параметра-пере- менной, описываемого с ключевым словом string. В состоянии по умолчанию ({$P-}) string соответствует строковому типу с атрибу- том размера 255. В состоянии {$P+} string указывает, что параметр является открытым строковым параметром (см. ниже).
При ссылке на фактический параметр-переменную, связанную с индексированием массива или получением указателя на объект, эти действия выполняются перед активизацией процедуры или функции.
Правила совместимости по присваиванию для объектного типа применяются также к параметрам-переменным объектного типа. Для формального параметра типа T1 фактический параметр должен быть типа T2, если T2 находится в домене T1. Например, с учетом опи- саний Главы 4, методу TField.Copy может передаваться экземпляр TField, TStrField, TNumField, TZipField или любой другой экземп- ляр потомка TField.
Параметры-переменные ( параметры var) всегда передаются по ссылке, то есть указатель ссылается на ячейку памяти с фактичес- ким значением.