Каждый параметр, объявленный в списке формальных параметров, является локальным по отношению к данному блоку, т.е. не видим за его пределами. Это означает, в частности, что в списке формальных параметров можно использовать переменные с такими же именами, как в основной программе или других процедурах и функциях. Данное правило верно и для локальных, т.е. объявленных внутри процедуры или функции, переменных.

Например:

var a: byte; {определяем глобальную переменную с именем A}

procedure One(a:byte); {определяем процедуру One с аргументом A}

var b:byte; {определяем локальную переменную B процедуры One}

procedure Two;

var a:byte; {определяем локальную переменную A процедуры Two}

begin

a:=89;{значение присваивается локальной переменной A процедуры Two}

b:=a; {значение локальной переменной A процедуры Two присваивается локальной переменной B процедуры One }

end; {процедура Two завершена …}

begin {… начинается процедура One }

a:=98;{значение присваивается переменной A из процедуры One}

end; {процедура One завершена …}

begin {… начинается основная программа }

a:=0; {значение присваивается глобальной переменной A}

end.

Существует 3 вида формальных параметров: Параметр-значение, Параметр-переменная, Параметр-нетипированная переменная.

1) Параметр-значение - без "var" или "const", но с типом параметра.

Параметр-значение является полностью локальным, за исключением того, что принимает начальное значение от фактического параметра, переданного в процедуру или функцию. Любое изменение параметра-значения внутри составного оператора процедуры или функции не влияет на значение фактического параметра. С помощью параметра-значения можно передавать информацию в процедуру или функцию, но не обратно.

Фактический параметр, соответствующий параметру-значению в операторе процедуре или вызове функции может быть выражением любого типа, совместимого по присваиванию с типом формального параметра.

Например:

1

В результате работы программы на экране появится число 8.

2) Параметр-переменная - с "var" или "const", и с типом параметра. Компилятор запрещает изменять параметр, предваряемый зарезервированным словом const.

Параметр-переменная используется как для передачи информации в процедуру или функцию, так и обратно. Любое изменение формального параметра-переменной сказывается и на фактическом параметре.

Фактический параметр, соответствующий формальному параметру-переменной, должен быть переменной с типом, тождественным формальному параметру.

Например:

Если заголовок процедуры определен следующим образом:

procedure A(var b:byte);

то компилятор выдаст ошибку при попытке ее вызова с константным значением или выражением в качестве аргумента.

procedure A(var b:byte);

begin

end;

var x:integer; y:byte;

begin

a(7); a(4+y); a(x); {неверные вызовы!!!}

ayes; {правильный вызов}

end.

Файловые типы могут передаваться только как параметры-переменные.

Параметры-переменные отличаются от параметров-значений методом передачи данных. Если параметр-значение - это копия фактического параметра, то параметр-переменная - это ссылка на фактический параметр, его адрес в памяти компьютера. Из этого вытекает еще одна особенность параметров-переменных: объем памяти, выделяемый для них, неизменен и равен 4 байтам. Таким образом, если в процедуру или функцию требуется передать, например, массив большого размера, то для ускорения работы программы и экономии памяти желательно осуществить его передачу как параметра-переменной. В то же время, если требуется запретить изменение переданного массива, можно вместо зарезервированного слова var воспользоваться словом const.

Например:

procedure X(var A:integer); begin a:=7; end;

var d:integer;

begin {основная программа}

d:=8;

x(d);

writeln(d);

end.

В результате работы программы на экране появится число 7.

3) Параметр-нетипированная переменная - с "var" или "const", и без типа параметра.

Если параметр является нетипированным, то соответствующий фактический параметр может быть переменной любого типа. В этом случае внутри процедуры или функции может потребоваться преобразование типа или использование абсолютных переменных для параметра.

<- Предыдущая страница | Следующая страница ->
Последнее изменение: Вторник 1 Март 2011, 16:52