Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Существует два способа описывать параметры: как параметры-значения и как параметры-переменные. В предыдущем разделе использовались параметры-значения. Параметр-значение является просто локальной переменной, начальное значение которой задается при вызове процедуры.
Пример:
var
a, b: integer; {Глобальные переменные}
procedure P3(a, b: integer); {Внутри процедуры символами a и b
обозначаются формальные параметры. Действия с ними никак не
повлияют на значения глобальных переменных a и b}
begin
a:=a+1;
b:=b+1;
writeln(a+b);
end;
begin
a:=1;
b:=1;
P3(a, b);{Вызов процедуры, где в качестве фактических параметров
использованы значения глобальных переменных a и b}
writeln(a, b);
end.
Если в заголовке процедуры перед какими-либо из параметров поставить слово var, то это будут параметры-переменные. Например:
procedure P3(var a, b: integer; c: real);
Здесь a и b – параметры-переменные, c – параметр-значение. При вызове процедуры фактический параметр, задающий значения этих формальных параметров не может быть выражением или константой, а должен быть обязательно переменной. То есть, недопустимы следующие вызовы:
P3(x+y, y+1, z+2);
P3(x, 2, z);
где x, y, z – глобальные переменные. Такие инструкции вызовут синтаксическую ошибку. В то же время синтаксически правильными будут вызовы:
P3(x, y, z+1);
P3(x, y, 2);
При использовании параметров-значений во время вызова процедуры происходит присваивание значения формальному параметру, то есть значение записывается в выделенные под хранение параметра ячейки памяти. При использовании параметров-переменных память под них не выделяется. Вместо этого на время работы процедуры они становятся синонимами тех переменных, которые указываются в качестве фактических параметров. Так при вызове P3(x, y, 2) формальные параметры a и b будут работать с теми же ячейками памяти, что и переменные x, y. Соответственно, если формальному параметру в процедуре присваивается новое значение, то и значение фактического параметра изменится. Воспроизведем пример, заменив тип параметров (добавим var перед их описанием):
var
a, b: integer; {Глобальные переменные}
procedure P3(var a, b: integer); {Внутри процедуры символами a и b
обозначаются формальные параметры. Теперь это
параметры-переменные и действия с ними повлияют на значения
глобальных переменных a и b}
begin
a:=a+1;
b:=b+1;
writeln(a+b);
end;
begin
a:=1;
b:=1;
P3(a, b);{Вызов процедуры, где в качестве фактических параметров
использованы глобальные переменные a и b.
После вызова глобальные переменные увеличатся на 1}
writeln(a, b);
end.
Если без слова var программа выводила числа 4, 1, 1, то после его добавления получится 4, 2, 2.
Следующий раздел:
Предыдущий раздел:
во втором примере в ремарке к процедуре следует убрать слово …НИКАК…
Спасибо, исправил.
Вот тут написано: «Под формальные и фактические параметры-значения транслятор отводит разные области памяти. Поэтому результат выполнения процедуры может быть передан только через параметр-переменную.» http://pas1.ru/paramvar
А у вас: «При использовании параметров-переменных память под них не выделяется. Вместо этого на время работы процедуры они становятся синонимами тех переменных, которые указываются в качестве фактических параметров.»
Ничего не понятно.