Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на модуль 1 ОП.docx
Скачиваний:
8
Добавлен:
24.11.2019
Размер:
926.17 Кб
Скачать

12) Прості змінні

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

Вказівні змінні

Вказівні змінні – це такі змінні, в яких значенням вмісту може бути посилання або адреса. Вони поділяються, у свою чергу на дві групи вказівних змінних – типізовані, тобто ті, в яких значенням вмісту є посилання і не типізовані тобто ті, в яких значення вмісту – адреса.

Типізовані вказівні змінні

Як значення вмісту типізованих вказівних змінних використовується посилання.

Застосування операції розіменування

Оскільки вміст типізованої вказівної змінної можна інтерпретувати як ім’я (у нього таж значення є посилання, як і в імені змінної), то до вмісту такої змінної можна застосувати операцію розіменування.

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

Схема типізованої вказівної змінної

Оскільки перша операція розіменування звичайно виконується в мовах програмування автоматично, то на неї не потрібно робити вказівки при використанні змінної. Проте для другої операції розіменування необхідно вказати її позначення при використанні змінної з метою доступу до значення, на яке вказує значення вмісту цієї змінної. Тому, якщо позначення змінної nVal, то використання цього позначення в тексті програми як nVal приведе до автоматичного використання першої операції розіменування. Якщо ця змінна типізована вказівна, то можливе застосування другої операції і в тексті програми це матиме такий вигляд: nVal^ (мова Pascal) або * nVal (мова С).

У мові С до значень типізованих вказівних змінних можна застосувати такі операції:

  • додавання до цілого;

  • віднімання від літерала цілого;

  • віднімання значення однієї вказівної змінної вд значення іншої (тип змінних має бути однаковим);

  • порівняння значень типізованих вказівних змінних.

Семантика операції:

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

Нетипізовані вказівні змінні

Нетипізовані вказівні змінні мають адресу як значення вмісту тому при опису змінної не описується тип значення, на яке могла б указувати ця адреса. Отже, до значення вмісту нетипізованої вказівної змінної не можна застосувати другу (ручну) операцію розіменування, а така змінна може вочевидь, використовуватись лише для зберігання адреси. Нетипізована вказівна змінна в мові Pascal описується як pointer, а в мові С як void*.

13) Зміна значень програмних об’єктів

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

Зміна значень літерала

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

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

Змінна значення константи

Значенням константи є значення літерала, тому для зміни значення константи необхідно змінити значення літерала, що входить до складу константи, і претранслювати програму.

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

Зміна значення змінної

За допомогою самих лише літералів і констант не можна створювати програми, в яких значення змінювалися б під час виконання. Очевидно, що корисність таких програм дуже низька. Для забезпечення на описання програм, в яких значення змінюється під час виконання, використовується змінна. На відміну від літерала, зв’язок між позначенням і значенням змінної непрямий. Це полягає в тому, що в частині конструкції змінної, безпосередньо пов’язаної з її позначенням, розміщується не значення, як у літерала, а вказівка на місце, де воно зберігається. Тому хоча значення змінної (значення вмісту) й існує відразу після компіляції, усе ж його можна змінити під час виконання програми тыльки шляхом виконання послідовності базових операцій. При цьому така зміна, вочевидь, пов’язана зі знищенням старого значення змінної у програмі.

Зміна значення змінної відбувається за допомогою спеціального оператора, який називається оператором присвоювання (assignment statement).