В объявлении подпрограммы можно не указывать тип параметра-переменной:
procedure pr ( var x );
Такой параметр будет называться нетипизированным. В этот параметр можно передать аргумент, относящийся к любому типу данных.
Для того чтобы внутри самой подпрограммы корректно обрабатывать значения, поступившие через нетипизированный параметр, существует два способа обработки.
I) При помощи операции явного преобразования типа данных можно преобразовать нетипизированное значение, относящееся к нужному типу данных.
Например,
в процедуре pr значение одного и того же параметра х интерпретируется тремя разными способами: как целое число, как вещественное число и как масси:
procedure pr(var x);
type arr = array[1..10] of byte;
var y: integer;
z: real;
m: arr;
begin
...
y:= integer(x);
z:= real(x);
m:= arr(x);
...
end;
II) Совмещение в памяти. Нужно описать внутри подпрограммы локальную переменную, которая будет физически совпадать с переменной, передаваемой через нетипизированный параметр:
<локальная_переменная> : <тип> absolute <нетипизир_параметр>;
В этом случае будут совмещены значения, физически записанные в этих переменных, в точности так же, как это происходит при подстановке аргумента в параметр-переменную, однако без контроля за совпадением типов данных. Поэтому вполне возможна, например, ситуация, когда первые четыре байта строки (аргумента, переданного в нетипизированный параметр) будут восприниматься как longint-число:
function f(var x):real;
var x1: longint absolute x;
begin
{здесь с началом любой переменной, поступившей в параметр х,
можно обращаться как с longint-числом при помощи локальной переменной ххх}
end;