НОУ ІНТУІТ, Лекція, Управління даними та параметрами підпрограм
Передача параметрів
Зовнішні дані в підпрограмі можуть використовуватися, якщо вони є глобальними об'єктами для цієї підпрограми або передані їй як параметри. У описі підпрограми вказуються формальні параметри, а точці виклику підпрограми задаються фактичні параметри. Формальний параметр визначає тип фактичного параметра, що передається. Фактичний параметр є виразом відповідного типу.
Розрізняються такі способи передачі параметрів: за посиланням, ім'ям, значенням, значенням-результатом, за результатом, за значенням-константою. Набір допустимих способів передачі параметрів залежить від мови програмування.
При передачі параметрів посилання у запису активації, створюваної під час виконання підпрограми, асоціація для фактичного параметра може формуватися в нелокальному середовищі посилань (залежно від реалізації компілятора). Так, при виклику підпрограми для параметрів, що передаються за посиланням, формуються покажчики, доступні як з підпрограми, що викликає, так і з викликається. Таким чином, при зміні у підпрограмі, що викликається значення фактичного параметра, переданого за посиланням, у викликаючій програмі об'єкт , відповідний фактичному параметру, також буде змінений.
При передачі параметрів на ім'я в підпрограмі до її виконання відбувається заміна формальних параметрів на фактичні. При цьому значення фактичних параметрів обчислюються всередині підпрограми, що викликається.
При передачі параметрів за значенням у підпрограмі створюється псевдонім фактичного параметра (копія фактичного параметра), значення якого присвоюється формальному параметру підпрограми. При такому способіпередачі параметрів зміни, зроблені у викликаній процедурі над значенням фактичного параметра, будуть не видно далі в підпрограмі, що викликає.
При передачі параметрів за значенням-результатом змінене значення фактичного параметра повертається підпрограмі, що викликає. Однак, на відміну від передачі параметрів за посиланням, при даному способі спочатку в момент виклику підпрограми значення фактичного параметра присвоюється відповідного формального параметра підпрограми, що викликається, і всі зміни виконуються над формальним параметром, а не над посиланням на фактичний параметр . При завершенні підпрограми, що викликається, поточне значення формального параметра присвоюється назад фактичному параметру. Такий тип передачі параметрів був використаний у мові ALGOL-W.
При передачі параметрів за результатом поточне значення формального параметра присвоюється назад фактичного параметра при завершенні підпрограми, що викликається, але початкове значення фактичного параметра викликаної підпрограмі не передається. Формальний параметр підпрограми має бути ініційований підпрограмою (реалізація може дозволяти ініціалізацію за умовчанням відповідно до типу даних параметра).
При передачі параметрів за значенням-константою значення фактичного параметра не може бути змінено. Такий спосіб передачі параметрів може бути реалізований і як окремий випадок передачі параметра за значенням, і як передача параметра за посиланням на константний вираз, що однозначно гарантує незмінність фактичного параметра підпрограми, що викликає.
У наступній таблиці наведені фрагменти коду, що ілюструють способи передачі параметрів у мовах програмування та Pascal .