Формат:
(const t1, t2,.., tn: <тип>); или
(const t1: <тип>; const t2: <тип>;.. const tn: <тип>);
где t1, t2, tn – параметры-константы.
Например, (const t1: real; const t2, t3: integer);
Пример 8.1. Procedure MyProc(var a: Real; b: integer; const c: char);
Здесь, a – параметр-переменная, b – параметр-значение, c – параметр-константа.
Параметры-процедуры и параметры-функции. Это параметры, которые сами являются процедурами или функциями.
Между формальными и фактическими параметрами должны быть следующие соответствия:
1. количество параметров;
2. порядок следования входных и выходных параметров;
3. тип данных.
Для того чтобы понять, в каких случаях использовать тот или иной тип параметров, рассмотрим, как осуществляется замена формальных параметров на фактические в момент обращения к подпрограмме.
Если параметр определён как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передаётся подпрограмме. Даже если в качестве фактического параметра указано простейшее выражение в виде переменной или константы, всё равно подпрограмме будет передана лишь копия переменной (константы). Любые возможности изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра.
|
|
Если параметр определён как параметр-переменная, то при вызове подпрограммы передаётся сама переменная, а не её копия (фактически в этом случае подпрограмме передаётся адрес переменной). Изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе.
В случае параметра-константы в подпрограмму также передаётся адрес области памяти, в которой располагается переменная или вычисленное значение. Однако компилятор блокирует любые присваивания параметру-константе нового значения в теле подпрограммы.