
- •Дослідження програмних об'єктів напередвизначених типів та операцій над ними
- •Опис програмних об’єктів
- •Ініціалізація змінних при створенні
- •Оператор привласнення
- •Загальна спрощена структура програми
- •Методичні вказівки Правила складання ідентифікаторів
- •Правила опису об’єктів у програмі
- •Частина 1 дослідження цілих типів даних
- •Завдання
- •Частина 2 дослідження дійсних типів даних
- •Завдання
- •Частина 3 дослідження арифметичних операцій над значеннями цілих та дійсних типів
- •Завдання
- •Частина 4 дослідження бітових операцій над цілими значеннями
- •Бітові операції
- •Завдання
- •Частина 5 дослідження логічних типів, логічних операцій та операцій відношення
- •Завдання
- •Частина 6 дослідження вказівних типів даних
- •Завдання
- •Частина 7 дослідження символьних типів та базової операції – атрибут
- •Завдання
- •Лабораторна робота 2
- •Дослідження структурних операторів операторного
- •Базису мов програмування паскаль та сі
- •Мета лабораторної роботи - вивчити устрій структурних операторів мов Паскаль та Сі та та використати їх при дослідженні адресної арифметики.
- •Теоретичні відомості
- •Адресна арифметика в Сі
- •Правила написання програм
- •Завдання
- •Лабораторна робота 3
- •Частина 2 багатовимірні масиви
- •Лабораторна робота 4 дослідження пойменованого типу даних
- •Лабораторна робота 5
- •Завдання
- •Контрольні запитання
- •Лабораторна робота 6 дослідження механізму підпрограм Мета лабораторної роботи - вивчити в мовах Паскаль та Сі опис та використання відкритих і закритих підпрограм.
- •Inline- підпрограми Сі:
- •Контрольні запитання
- •Контрольна робота дослідження використання підпрограм в лінійних структурах даних
- •Контрольні запитання
- •Напередвизначені типи
- •Знак Число без знаку
- •Знак e
- •Список літератури
- •С. Робинсон и др. С# для профессионалов. Т 1,2. – м.: Лори, 2003. – 995с.
Частина 6 дослідження вказівних типів даних
Теоретичні відомості
Програмні об’єкти розташовуються у пам’яті комп’ютера. Пам’ять комп’ютеру складається з діапазону комірок, які мають унікальні адреси, що складають адресний простір. Будь-яка комірка пам’яті, що адресується, може, як правило, зберігати один байт (8 біт) інформації. Програмні об’єкти можуть займати одну або більше комірок. Адреса першої комірки об’єкта є його адресою.
Існує спеціальний тип для зберігання адрес – вказівний. Змінна-покажчик може бути типізованою або нетипізованою. Типізований покажчик може містити тільки адресу об’єкта відповідного типу. Нетипізований покажчик можу адресувати об’єкт будь-якого типу.
Значення змінної покажчика може бути присвоєно іншому покажчикові, якщо їх типи є ідентичними. Зміст нетипізованого покажчика може бути присвоєно будь-якому покажчику. Покажчикові може бути присвоєно «пусте» значення (null), яке вказує на абстрактний неіснуючий об’єкт.
Наприклад:
Паскаль:
ipA : ^integer; \\ опис типізованого покажчика ipA
rpB : ^real; \\ опис типізованого покажчика rpB
pC : Pointer; \\ опис нетипізованого покажчика pC
Сі:
int *ipA;
float *fpB;
void *pC;
Існують дві основні операції роботи з покажчиками: взяття адреси та розіменування. Адреса програмного об’єкта може бути отримана за допомогою спеціальної операції – взяття адреси. Адресу об’єкта певного типу може бути присвоєно тільки покажчику того ж типу або нетипизованому покажчику. Розіменування дозволяє отримати доступ до значення об’єкту, на якій вказує покажчик. Розіменування підтримується тільки для типізованих покажчиків.
Розмір значення змінної залежить від її типу. Для визначення розміру певного значення змінної чи розміру будь-якого значення певного типу в мовах програмування існує спеціальна базова операція sizeof.
Наприклад:
Паскаль:
ipA := @iCount; \\ взяття адреси цілої змінної iCount
rpB := @rR; \\ взяття адреси дійсної змінної rR
pC := nil; \\ ініціалізація покажчика pC нулем
\\ розіменування ipA та збереження отриманого значення у цілій змінній iK
iK := ipA^;
\\ встановлення значення, на яке посилається ipA, рівним значенню iK
ipA^ := iK;
iSize := sizeof (integer); \\ визначення розміру значень типу integer
iSize := sizeof (iK); \\ визначення розміру значення iK
Сі:
ipA = & iCount;
fpB = &fR;
pC = null;
iK = * ipA;
* ipA = iK;
iSize = sizeof (int);
iSize = sizeof (iK);
Таблиця 9
Використання нетипізованих вказівних змінних
-
pointer
void*
не можна
не можна
розіменувати
Розіменувати
U = v
U = &v
можна
Можна
p := @U
v = &U
p := U
v = U
p := p
v = v
new p
v = new size
U := p;
U := @p
Примітка. U – типізована вказівна змінна; p, v - нетипізовані вказівні змінні.