При передаче параметров-переменных в подпрограмму фактически через стек передаются их адреса в порядке, объявленном в заголовке подпрограммы. Следовательно, подпрограмма имеет доступ к этим параметрам и может их изменять.
Параметры-переменные указываются в заголовке подпрограммы аналогично параметру-значению, но только перед именем параметра пишется зарезервированное слово var. Его действие распространяется на все переменные, указанные до ближайшей точки с запятой, то есть в пределах одной группы.
Пример
procedure maxmin(a:tArr; var max, min :real; n :word);
Тип параметров-переменных может быть любым, включая файловый.
При вызове подпрограммы на месте параметра-переменной в качестве фактического параметра должна использоваться переменная идентичного типа.
Пример Функция вычисления максимального элемента в массиве.
type tarr = array [1..100] of integer;
{фактический параметр должен быть переменной или типизированной константой типа tarr}
function max (var mas:tarr; n:byte):integer;
var
ma:integer;
i:byte;
begin
ma:=mas[1];
for i:=2 to n do
if ma<mas[i] then ma:=mas[i];
max:=ma;
end;
Этот вариант лучше предыдущего, так как в стеке не создается копия исходного массива, что улучшает быстродействие и экономит память.
Однако, при такой передаче параметра возможно его нежелательное изменение.
Подпрограмма по-прежнему может работать с одним типом массивов.