КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Приклади використання небезпечного третього способу. 2
Приклади використання небезпечного третього способу. 1 Передача значення Передавання посилання. 3 Передавання посилання. 2
Використання програмних об’єктів як фактичних параметрів: Ø фактичний параметр може бути тільки змінною, тому що лише змінна має у своїй конструкції ім’я, яке заміщує посилання в імені формального параметра; Ø Якщо фактичний параметр є змінною індексованого типу, то індекс попередньо обчислюється.
Семантика: Цей спосіб дає змогу присвоювання фактичним параметрам значень через відповідні їм формальні параметри, впливаючи тим самим на середовище, яке оточує виклик підпрограми. А так як змінювати значення константи, літерали та вирази не мають змоги (на відміну від змінних), в якості фактичних параметрів, переданих за посиланням, данні програмні об’єкти використовувати неможливо. Передавання імені. 1
Ім'я фактичного параметра подається буквально (текстуально) без обчислень замість імені формального параметра:
Передавання імені. 2
Використання програмних об’єктів як фактичних параметрів: Ø якщо фактичний параметр – скалярна змінна, то передавання імені точно відповідає способу передавання посилання; Ø якщо фактичний параметр – вираз, побудований із скалярних об'єктів, то результат буде аналогічний способу передавання значення. Однак обчислення виразу у підпрограмі відбуватиметься щоразу при обчисленні формального параметра; Ø Якщо фактичний параметр – елемент мультизначення індексованого типу, то результат буде аналогічний способу передавання значення. Проте індекс обчислюється щораз при використанні формального параметра.
Передавання імені. 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.
a[i] = 10 початкове значення х = 10 кінцеве значення а = (10, 20) 2. Передача посилання
x = a[i] = a[1] в підпрограмі х:= х + 2 означає a[1] = a[1] + z кінцеве значення а = (12, 20) 3. Передача імені
x = a[i] = a[i] в підпрограмі x:= x + 2 означає a[i]:= a[i] + 2 кінцеве значення а = (10, 22)
Підпрограма 1:
F(x) a * x + 3; end F;
тоді виклик F(b + c) призведе до виразу a * b + c + 3 Підпрограма 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 спосіб передавання значень параметрів зазначається наступним чином шляхами|коліями|: · передавання значення вказується за замовчуванням; · передача посилання вказується зарезервованого лексемою var r; · передача найменуванняне використовується.
У мові С реалізовано тільки один спосіб – передавання значення, інших способів немає. Повертання результатів із підпрограми
Закриті підпрограми можуть повертати результат у зовнішнє оточення підпрограми трьома шляхами: · використовуючи способи передавання параметрів за посиланням або за найменуванням; · використовуючи в тілі підпрограми об'єкти, описані глобально;
· формуючи результат спеціальним оператором і у спеціальному місці пам'яті поза підпрограмою. Процедури та функції
Застосування перших двох шляхів не потребує додаткових витрат. Проте використання другого шляху належить до побічних ефектів і вкрай небажане. Третій шлях потребує опису результату, виробленого підпрограмою, і застосування спеціального оператора для розміщення результату у певному місці пам'яті. Підпрограми залежно від того, чи є у них результат і яким із вказаних шляхів він повертається, поділяються на два типи: процедури та функції.
Дата добавления: 2014-01-04; Просмотров: 306; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |