Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Передача параметров в подпрограммы.



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

procedure p(a: byte; { описание параметра а}

b: char; { описание параметра b}

var c: integer; { описание параметра c});

Формальные параметры в программах на Паскале бывают двух типов:

1). Параметры – значения (обычно это аргументы).

2). Параметры – переменные (обычно это результаты).

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

Особенностью использования параметров - значений является то, что все действия (изменения), которым будут подвергнуты в теле вызванной подпрограммы эти формальные параметры-значения подпрограммы, будут относиться лишь к копиям (в стеке) соответствующих объектов вызывающей подпрограммы (указанных как фактические параметры) и при выходе из вызываемой подпрограммы в вызывающую (подпрограмму) эти изменения не отразятся на значениях соответствующих объектов (в вызывающей подпрограмме), указанных как фактические параметры (при вызове).

При передаче параметра - переменной в стек копируется не значение фактического параметра, а адрес фактического параметра. Соответствие между формальным и фактическим параметром устанавливается таким образом, что формальный параметр становится синонимом (они занимают одну и ту же область в памяти) фактического. Это приводит к тому, что изменение формальных параметров – переменных вызывает одновременное изменение и объектов, соответствующих фактическим параметрам. Поэтому по выходу из подпрограммы изменения параметров – переменных потеряны не будут (см. рис. ниже).

На Паскале параметры - значения описываются как обычные переменные:

Формальные параметры

       
   


procedure Summa (a: byte; b: char; )

Параметры - переменные на Паскале описываются после слова var:

( … var c: integer; … )

Особенность формальных и файтических параметров на Паскале:

0) в заголовке процедуры или функции описание одного формального параметра отделяется от другого точкой с запятой.

1) Каждый новый тип параметра - переменной должен сопровождаться словом var.

... var c: integer; d: byte; d - параметр-значение

var c: integer; var d: byte; d - параметр-переменная

2) Вызов процедуры имеет следующий вид:

Summa (1, 2, l, f);

фактические параметры

3)При вызове: один фактических параметр от другого отделяется запятой (а не ‘; ’).

4) При описании подпрограммы после заголовка надо ставить точку с запятой.

5) Соответствие между формальными и фактическими параметрами устанавливается по порядку их записи слева направо.

6) Количество и тип формальных и фактических параметров должны совпадать.

7) Для формальных параметров – переменных соответствующим фактическим параметром может быть только переменные (не значение).

8) Для формальных параметров – значений соответствующим фактическими параметрами могут быть константы, переменные, вызовы функций, выражения.

9) Имена формальных и фактических параметров обычно не совпадают.

копирование при вызове стек

Фактические параметры

(в вызывающей п/п) копия a область памяти под форм. пар-р x (x: =a)

Var копия b область памяти под форм. пар-р y (y: =b)

a:...; адрес с область памяти под адрес факт. пар-ра z (z: =адрес_с^)

область памяти в стеке под копии значений и адреса фактических параметров вызова
b: ...;

c: ...;

вызов: p(a, b, c);

наложение при вызове

вызываемая п/п:

Procedure P (x, y: read:

Var z: char);

begin

..x: =1;

y: =2;

z: =3;

..............

end;

ПРИМЕР. Вычислить с помощью процедуры сумму 3-х чисел:

Program P;

Var описание глобальных переменных

a, b, c, s: char;

procedure summa(x, y, z: real;

var g: real);

begin описание процедуры

g: =x+y+z;

end

begin

c: =1;

b: =2; ввод значений фактических параметров

a: =3;

s: =0;

writeln(‘s=’, s); до вызова

summa(a, b, c, s); вызов процедуры

writeln(‘s=’, s); после вызова

end.

В результате выполнения данной программы на экран будет выведено две строки:

s = 0

s = 6

В этом примере x, y, z и g - в заголовке процедуры - формальные параметры. При вызове процедуры вформальные параметры примут значения соответствующих фактических:

x=a, y=b, z=c, g=s

причем g и s станут синонимами.

Что произойдет, если из заголовка удалить слово Var? Переменная g становится параметром - значением.

Что будет выведено на экран? В этом случае при вызове процедуры внутри процедуры g - примет значение 6. Это значение будет размещено в стеке и при выходе из процедуры там же и останется. Ввиду того, что не была установлена связь между фактическим и формальным параметром, значение S останется после вызова = 0. На экран будет выведено, то значение s, которое она имела до вызова процедуры, т.е. s=0.


 


Поделиться:



Популярное:

  1. Аналитический метод расчета параметров разноритмичных потоков
  2. Б. Заголовок процедуры со списком формальных параметров.
  3. Бурение нефтяных и газовых скважин. Система контроля технологических параметров бурения. Конструкция скважин.
  4. Вход в информационно-поисковую систему, определение параметров поиска
  5. Выбор теплоносителя и его параметров.
  6. Гаутама Будда взглянул на Махакашьяпу, подозвал его ближе и сказал: «Этот цветок принадлежит тебе. Позаботься о нем». Это и есть первая передача без слов.
  7. Генеральная и выборочная совокупность. Способы отбора. Статическая функция распределения. Статические оценки параметров распределения.
  8. Глава VI. 10 ПАРАМЕТРОВ И 70 ОЧКОВ
  9. Единицы измерения параметров ионизирующих излучений и радиоактивности
  10. Зависимость параметров кристаллизации от степени переохлаждения.Кр.Таммана.
  11. ИЗМЕНЕНИЕ ПАРАМЕТРОВ ВОЗДУХА С ВЫСОТОЙ.
  12. Изменение параметров изображений


Последнее изменение этой страницы: 2016-07-12; Просмотров: 589; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.024 с.)
Главная | Случайная страница | Обратная связь