- •1) Програма. Комп’ютерна програма. Програма, як система.
- •2) Програмне забезпечення. Життєвий цикл.
- •7) Лексичний рівень інкапсуляції. Алфавіт мови. Лексеми. Лексичний аналіз. Лексичний устрій тексту програм.
- •8)Напередвизначені позначення. Позначення, що визначаються.
- •9) Тип, загальні положення.
- •Класифікація напередвизначених типів
- •12) Прості змінні
- •13) Зміна значень програмних об’єктів
- •Оператор присвоювання
- •14) Вираз
- •15) Блок
- •Нумерація, номер і глибина вкладеності блока
- •Мембранний ефект. Регулювання області дії
- •16) Регулювання періоду існування
- •Глобальне розрізнення видимості позначень (імен)
- •17) Суворо типізована мова
- •17, 18) Зведення типів
- •Явне зведення типів
- •Неявне зведення типів
- •Уникнення суворої типізації
- •21) Стратегія динамічного розподілу пам'яті на основі блока
- •22) Стратегія розподілу пам'яті в купі
- •Реалізація стратегії статичного розподілу пам'яті
- •Динамічний розподіл пам'яті на основі блока
- •Динамічний розподіл пам'яті на основі купи.
- •24) Структурна капсула
- •25) Структурні оператори
- •26) Оператори вибору
- •27) Оператор повторення
- •Форма оператора повторення do
- •Форма оператора повторення while
12) Прості змінні
Характерним для простої змінної є те, що значення її вмісту не може бути адресою або посиланням. Значення всіх інших типів припускаються як значення вмісту простої змінної.
Вказівні змінні
Вказівні змінні – це такі змінні, в яких значенням вмісту може бути посилання або адреса. Вони поділяються, у свою чергу на дві групи вказівних змінних – типізовані, тобто ті, в яких значенням вмісту є посилання і не типізовані тобто ті, в яких значення вмісту – адреса.
Типізовані вказівні змінні
Як значення вмісту типізованих вказівних змінних використовується посилання.
Застосування операції розіменування
Оскільки вміст типізованої вказівної змінної можна інтерпретувати як ім’я (у нього таж значення є посилання, як і в імені змінної), то до вмісту такої змінної можна застосувати операцію розіменування.
Ця операція забезпечить доступ до значення такого типу, яким типізовано дану вказівну змінну. Тому при опису змінної крім позначення, яке вказує на те, що вона є вказівною, необхідно зазначати тип, значення якого стане доступним у результаті виконання другої операції розіменування (звідси й назва - типізована).
Схема типізованої вказівної змінної
Оскільки перша операція розіменування звичайно виконується в мовах програмування автоматично, то на неї не потрібно робити вказівки при використанні змінної. Проте для другої операції розіменування необхідно вказати її позначення при використанні змінної з метою доступу до значення, на яке вказує значення вмісту цієї змінної. Тому, якщо позначення змінної nVal, то використання цього позначення в тексті програми як nVal приведе до автоматичного використання першої операції розіменування. Якщо ця змінна типізована вказівна, то можливе застосування другої операції і в тексті програми це матиме такий вигляд: nVal^ (мова Pascal) або * nVal (мова С).
У мові С до значень типізованих вказівних змінних можна застосувати такі операції:
додавання до цілого;
віднімання від літерала цілого;
віднімання значення однієї вказівної змінної вд значення іншої (тип змінних має бути однаковим);
порівняння значень типізованих вказівних змінних.
Семантика операції:
Застосувати наведені операції небезпечно, оскільки їх виконання не контролюються транслятором, і тому їх широко використовувати не рекомендовано.
Нетипізовані вказівні змінні
Нетипізовані вказівні змінні мають адресу як значення вмісту тому при опису змінної не описується тип значення, на яке могла б указувати ця адреса. Отже, до значення вмісту нетипізованої вказівної змінної не можна застосувати другу (ручну) операцію розіменування, а така змінна може вочевидь, використовуватись лише для зберігання адреси. Нетипізована вказівна змінна в мові Pascal описується як pointer, а в мові С як void*.
13) Зміна значень програмних об’єктів
Коли програмний об’єкт створено, він отримує значення. Сутність виконання програми полягає у зміні значень програмних об’єктів, зокрема значень змінних.
Зміна значень літерала
Літерал за визначенням являє собою самовиражене значення. Зв’язок між позначенням літерала та його значенням безпосередній, причому встановлюється він один раз під час компіляції програми. Тому для зміни значення літерала, вочевидь, достатньо змінити його зображення за допомогою редактора текстів середовища програмування та перетранслюювати програму.
Отже, зміна значення літерала має відбуватися під час підготовки вихідного тексту і неможлива у процесі її виконання.
Змінна значення константи
Значенням константи є значення літерала, тому для зміни значення константи необхідно змінити значення літерала, що входить до складу константи, і претранслювати програму.
Зміна значень константи, так само, як і літерала, можлива лише під час створення тексту програми і неможлива у процесі її виконання.
Зміна значення змінної
За допомогою самих лише літералів і констант не можна створювати програми, в яких значення змінювалися б під час виконання. Очевидно, що корисність таких програм дуже низька. Для забезпечення на описання програм, в яких значення змінюється під час виконання, використовується змінна. На відміну від літерала, зв’язок між позначенням і значенням змінної непрямий. Це полягає в тому, що в частині конструкції змінної, безпосередньо пов’язаної з її позначенням, розміщується не значення, як у літерала, а вказівка на місце, де воно зберігається. Тому хоча значення змінної (значення вмісту) й існує відразу після компіляції, усе ж його можна змінити під час виконання програми тыльки шляхом виконання послідовності базових операцій. При цьому така зміна, вочевидь, пов’язана зі знищенням старого значення змінної у програмі.
Зміна значення змінної відбувається за допомогою спеціального оператора, який називається оператором присвоювання (assignment statement).