Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

Формальні і фактичні параметри. Механізм параметрів

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

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

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

Список формальних параметрів указується після імені підпрограми і заключається в круглі дужки. Опис формальних параметрів дуже схожий на опис змінних у блоці. Кожен параметр, заданий у заголовку вважається локальним у даній підпрограмі так само, як і змінні, описані в блоці цієї підпрограми.

Ідентифікатори формальних параметрів можна вважати умовними позначеннями в тілі підпрограми тих реальних чи ФАКТИЧНИХ параметрів, що будуть передані в підпрограму при її виклику.

Нижче приводяться синтаксичні діаграми для формальних параметрів.

Приклади заголовків процедур і функцій:

function MaxElem ( A:Vector; n=byte ): real;

Procedure Sum (А,В:Matrix; var С:Matrix );

Procedure Move ( var Source, Dest; n : word);

Слід звернути увагу на декілька обставин. По-перше, типи формальних параметрів повині обов’язково позначатись ідентифікаторами. Наприклад, наступний заголовок є неприпустимим:

Procedure Incorrect ( var A : array[1..10] of byte )

Якщо необхідно передати в підпрограмму параметр із типом, який визначає програміст, слід скористатись його ідентифікатором, наприклад:

type

MyArray = array[1..10] of byte;

procedure Correct ( var A : MyArray ) ;

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

Із приведених вище синтаксичних діаграм випливає, що в списку формальних параметрів підпрограм припустимі принаймні три способи їхнього завдання:

1. Параметри, перед якими відсутнє службове слово var і за якими вказаний ідентифікатор типу.

2. Параметри, перед якими є службове слово var і за яким стоїть тип.

3. Параметри, перед якими є службове слово var після якого не вказаний тип.

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

Перші два способи передачі параметрів (ці параметри також називаються параметрами-значеннями і параметрами-змінними) були визначені в авторській версії мови Pascal, третій спосіб мається тільки в Turbo Pascal і являє деякий відступ від принципів строгої типізації, характерних для мови.