Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Существует два способа описывать параметры: как параметры-значения и как параметры-переменные. В предыдущем разделе использовались параметры-значения. Параметр-значение является просто локальной переменной, начальное значение которой задается при вызове процедуры.
Пример:
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
А у вас: «При использовании параметров-переменных память под них не выделяется. Вместо этого на время работы процедуры они становятся синонимами тех переменных, которые указываются в качестве фактических параметров.»
Ничего не понятно.