Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 20-21.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
380.74 Кб
Скачать

Передавання імені. 3

Семантика:

Цей спосіб найбільш ефективний, але й найбільш небезпечний, тому, як правило, у мовах програмування він не реалізується.

Приклад застосування різних способів передачі параметрів

i : integer;

а : array [1…2] of integer;

subroutine P(x : integer);

i := i + 1;

x := x + 2;

end P;

begin

a[1] := 10;

a[2] := 20;

i := 1;

P(a[i]);

end.

  1. Передача значення

a[i] = 10

початкове значення х = 10

кінцеве значення а = (10, 20)

  1. Передача посилання

x = a[i] = a[1]

в підпрограмі х := х + 2 означає a[1] = a[1] + z

кінцеве значення а = (12, 20)

  1. Передача імені

x = a[i] = a[i]

в підпрограмі x := x + 2 означає a[i] := a[i] + 2

кінцеве значення а = (10, 22)

Приклади використання небезпечного третього способу. 1

Підпрограма 1:

F(x)

a * x + 3;

end F;

тоді виклик F(b + c) призведе до виразу a * b + c + 3

Приклади використання небезпечного третього способу. 2

Підпрограма 2:

swap(int a, b)

int t;

t = a;

t = b;

b = t;

end swap;

тоді виклик swap(i, a[i]) призведе до виконання наступних операторів:

t = i;

i = a[i];

a [i] = t;

Зазначення способів передачі параметрів.1

Отже, у списку формальних параметрів необхідно зазначити спосіб передавання значень параметрів. Це можна робити трьома шляхами|коліями|:

  • явно, використанням спеціально зарезервованих слів;

  • за замовчуванням;

  • комбінуванням двох попередніх способів (явно або за замовчуванням).

Зазначення способів передачі параметрів.2

Наприклад, в мові Pascal спосіб передавання значень параметрів зазначається наступним чином шляхами|коліями|:

  • передавання значення вказується за замовчуванням;

  • передача посилання вказується зарезервованого лексемою varr;

  • передача найменування не використовується.

У мові С реалізовано тільки один спосіб – передавання значення, інших способів немає.

Повертання результатів із підпрограми

Закриті підпрограми можуть повертати результат у зовнішнє оточення підпрограми трьома шляхами:

  • використовуючи способи передавання параметрів за посиланням або за найменуванням;

  • використовуючи в тілі підпрограми об'єкти, описані глобально;

  • формуючи результат спеціальним оператором і у спеціальному місці пам'яті поза підпрограмою.

Процедури та функції

Застосування перших двох шляхів не потребує додаткових витрат. Проте використання другого шляху належить до побічних ефектів і вкрай небажане. Третій шлях потребує опису результату, виробленого підпрограмою, і застосування спеціального оператора для розміщення результату у певному місці пам'яті.

Підпрограми залежно від того, чи є у них результат і яким із вказаних шляхів він повертається, поділяються на два типи: процедури та функції.

Процедури

Підпрограми першого типу не виробляють значення–результат, а інші значення передають у зовнішнє оточення першими двома способами і називаються процедурами (procedure).

Для позначення процедур може використовуватися зарезервоване слово procedure (Pascal).