- •1 Основні відомості про вказівники
- •2. Вказівники та посилання
- •Void function_a (char*, int, short*);
- •Int *pi; /* вказівник-змінна на дані типу int */
- •3. Ініціалізація вказівника
- •4. Розіменування та присвоєння
- •5. Void-вказівник
- •6. Операція пересування вказівника
- •7. Використання вказівників з модифікатором const
- •8. Деактивації дії модифікатора
- •9. Подвійний вказівник
- •10. Вказівники і масиви
- •11. Доступ до ділянок динамічної пам'яті
- •12. Звільнення пам'яті
- •8. Операції з вказівниками
- •Int I, *pi; /* pi –змінна-вказівник */
- •13. Динамічні масиви
- •11. Посилання
- •Лабораторный практикум
- •Вопросы без ответов
- •3 Основні операції над вказівниками
- •4 Багаторівнева непряма адресація
- •5 Операції над вказівниками
- •Void main ()
- •Void main()
- •6 Проблеми, пов'язані з вказівниками
- •Int *х; /* змінній-покажчику 'х' виділена оп, але 'х' не містить значення адреси оп для змінної */
- •Int *х; /* х - ім'я покажчика, він одержав оп*/
- •Void main ()
- •9 Масиви
- •1.9.1 Основні поняття
- •Int а[5]; /* оголошення зовнішнього масиву */ main ()
- •9.2 Оголошення та звертання в одновимірних масивах
- •9.3 Оголошення та звертання до багатовимірних масивів
- •Int а[3][4]; /* а - вказівник-константа */
- •10 Масиви покажчиків
- •10.1 Робота з великими масивами
- •Void main()
- •Int *p[200], I, j; clrscr() ;
- •10.2 Вільні масиви та покажчики
- •11 Символьні рядки
- •11.1 Основні відомості про представлення рядків
- •11.2 Функції роботи з рядками
- •1. Функції введення рядків.
- •2. Функції виведення рядків.
- •14 Лекція №14
- •14.1 Вказівники Лекція № 2 - Вказівники та посилання
- •1.2.1. Вказівники
- •6. Вказівники і масиви
- •6.1. Вказівники і адреси
- •6.2. Вказівники і аргументи функцій
- •6.3. Вказівники і масиви
- •6.4. Адресна арифметика
- •6.5. Вказівники символів і функції
- •6.6. Вказівники – не цілі значення
- •6.7. Багатовимірні масиви
- •6.8. Масиви вказівників (вказівники на вказівники)
- •6.9. Ініціалізація масивів вказівників
- •6.10. Вказівники і багатовимірні масиви
- •6.11. Командний рядок аргументів
- •6.12. Вказівники на функції
- •Посібник для початківця про вказівники
- •6. Вказівники і структуровані програмні змінні
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •8. Вказівники і динамічні змінні (керування пам'яттю)
- •Void* operator new(size_t t)
- •Void operator delete(void* p)
- •Void main()
10. Вказівники і динамічні змінні (керування пам'яттю)
Вказівники реалізовують багатоцільовий мехнізм. З одного боку вони використовуються для непрямої адресації існуючих змінних, які розміщені в області стеку (сегмент SS) чи в області даних (сегмент DS), і забезпечують тим альтернативний доступ до їх значень. З іншого - вказівники дозволять керувати розподілом динамічної пам’яті - купи (heap).
Змінні, які розміщуються в купі, називаються динамчними. В переважній більшості вони є безіменними, а доступ до них забезпечується вказівниками чи посиланнями.
Існує два види куп:
- локальна (або ближня - local heap) купа. Це купа, яка формується в сегменті DS,
- глобальна (або далека- global heap) купа. Це купа, яка формується з незайнятої прикладною програмою області адесного простору, яки виділений даній програмі.
В різних моделях пам’яті програм [ ] - способах розміщення сегментів програми в оперативній пам’яті при її запуску - можуть бути різні співвідношення існування локальної та глобальної куп. Зокрема від повної відсутності куп (модель tiny) до існування лише глобальної (моделі flat чи huge). Адресація в локальній купі здійснюється лише за допомогою ближнього вказівника, оскільки адреса сегмента, в якому розміщена купа, зберігається в регістрі DS. Використання далекого вказівника можливе (помилку виправить компілятор), але не виправдане.
Адресація в глобальній купі може здійснюватись як через ближні так і через далекі вказівники (в окремих випадках при потребі компілятор самостійно може перевести вказівник з класу ближніх в клас далеких).
9. Вказівники типу far
З метою економії пам'яті у вказівниках, які використовуються в ОС з сегментованою пам'яттю зберігається лише зміщення відносно початку даного сегменту. Такий тип вказівника називається близьким і є типом по замовчуванні, або оголошується шляхом використання зарезервованого слова near.
Окрім near-вказівників С++ підтримує далекий тип вказівників (або вказівники типу far), який дає змогу зберігати повну інформацію про адресацію (сегмент+зміщення). Загальний синтаксис оголошення далеких вказівників має вигляд
[const] type* far pointerName[=address];
Незалежно від типу на які посилаються вказівники для near-вказівників виділяється одна цілочисельна комірка пам’яті розміром два байти; для far-вказівників - дві комірки, тобто 4 байти.
Основне призначення far-вказівників, це звертання до так званих далеких адрес - адрес, які можуть бути визначені лише явним зберігання пари сегмент+зміщення.
10. Вказівники і динамічні змінні (керування пам'яттю)
Вказівники реалізовують багатоцільовий мехнізм. З одного боку вони використовуються для непрямої адресації існуючих змінних, які розміщені в області стеку (сегмент SS) чи в області даних (сегмент DS), і забезпечують тим альтернативний доступ до їх значень. З іншого - вказівники дозволять керувати розподілом динамічної пам’яті - купи (heap).
Змінні, які розміщуються в купі, називаються динамчними. В переважній більшості вони є безіменними, а доступ до них забезпечується вказівниками чи посиланнями.
Існує два види куп:
- локальна (або ближня - local heap) купа. Це купа, яка формується в сегменті DS,
- глобальна (або далека- global heap) купа. Це купа, яка формується з незайнятої прикладною програмою області адесного простору, яки виділений даній програмі.
В різних моделях пам’яті програм [ ] - способах розміщення сегментів програми в оперативній пам’яті при її запуску - можуть бути різні співвідношення існування локальної та глобальної куп. Зокрема від повної відсутності куп (модель tiny) до існування лише глобальної (моделі flat чи huge). Адресація в локальній купі здійснюється лише за допомогою ближнього вказівника, оскільки адреса сегмента, в якому розміщена купа, зберігається в регістрі DS. Використання далекого вказівника можливе (помилку виправить компілятор), але не виправдане.
Адресація в глобальній купі може здійснюватись як через ближні так і через далекі вказівники (в окремих випадках при потребі компілятор самостійно може перевести вказівник з класу ближніх в клас далеких).
