Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прог-кол2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
49.14 Кб
Скачать

11. Поняття показника.

Місцезнаходження будь-якого об єкта в памяті визначається його адресою, розмір зарезервованого місця в памяті залежить від типу змінної, а для доступу до вмісту об’єкта служать його імя,(слово індифікатор ) для того щоб визначити адресу конкретної змінної служить унарна операція взяття адреси( амперсанд перед імям змінної ). Результат адреса задається в стандартному типі. Могутній засіб мови С++ - безпосередній доступ до памяті, для чого застосовується спеціальний тип змінних показник(Pointer) - представляє собою змінну, значення якої є адреса комірки памяті,ця змінна вказує на початок області оперативної памяті,де знаходиться об’єкт. Показник може посилатись на змінну , базового або похідного типу у роботі масивів/класів .

Обява показника (синтаксис) має вигляд : тип_об’єкта*індифікатор

Показник завжди займає 2або 4 байта в залежності від моделі памяті. Схематично показник зоображається:

12.Операція непрямого звернення до показників, розіменування.

Для доступу до об'єкту через вказівник використовується оператор розіменування *, що здійснює так званунепряму адресацію: *p означає «об'єкт, на який вказує p». По суті *p є ссилкою на об'єкт. Спроба розіменування нульового вказівника приводить до помилки при виконанні програми, спроба ж розіменуваннявказівника void*(див. розділ 2.4) викличе помилку на етапі компіляції. Однією з поширених помилок є розіменування неініціалізованих вказівників. Наприклад, в будь-якому з наступних випадків результат роботи програми непередбачуваний: char* s; *s=’a’; // помилка! cin>>s; // помилка!

13. Особливості роботи з порожніми показниками (типу void).

Покажчики – змінні, які зберігають адреси іншої змінної. Найчастіше ці адреси позначають місцезнаходження в пам'яті інших змінних. Наприклад, якщо змінна x містить адресу змінної y, то про змінну x говорять, що вона "вказує" на y. Змінні-покажчики (або змінні типу покажчика) мають бути відповідно оголошені. Формат оголошення змінної-покажчика є таким: тип *ім'я_змінної; У цьому записі елемент тип означає базовий тип покажчика, причому він по- винен бути допустимим С++-типом. Елемент ім'я_змінної є іменем змінної- покажчика. В мові С++ виділяють окремий тип показників, що називають порожніми (void). Вони можуть вказувати на об’єкт будь-якого типу. Для отримання доступу до об’єкта. На який вказує показник void треба його перевезти до того ж типу, що і тип самого об’єкта.

//модифікатор з допомогою непрямої адресації і порожнього показника void # include<iostream.h> Int main() { Char Let=’T’; Int nNum =’ ’; Void *ptr; Ptr=& Let; *(char*)ptr=’L’; Ptr = & nNum; *(int*) ptr=43; Cout <<Let<<”\n”; Cout <<nNum; Return 0; }

Домовленість про використання нульових покажчиків Оголошений, але не ініціалізований покажчик міститиме довільне значення. Під час спроби використати покажчик до присвоєння йому конкретного значення можна зруйнувати не тільки власну програму, але навіть і опе- раційну систему (найгірший, треба сказати, тип помилки!). Оскільки не існує

гарантованого способу уникнути використання неініціалізованого покажчика, то С++-програмісти прийняли процедуру, яка дає змогу уникати таких жахливих помилок. За домовленістю, якщо покажчик містить нульове значення, то вважається, що він ні на що не посилається. Це означає, що у випадку присвоєння нульового значення всім невживаним покажчикам і уникати його використання, то можна уникнути випадкового використання неініціалізованого покажчика. Рекомендуємо і Вам дотримуватися цієї практики програмування.

14. Для показників можуть застосовуватися арифметичні операції. Компілятор знаючи тип показника обчислює розмір змінної цього типу, після цього модифікує адресу, що міститься в показнику у відповідності із заданими арифметичними операціями, але з урахуванням обчисленого для цього типу розміру.

Int main () { Float var; Float *ptr=&var; Cout<<ptr<<”\n”; ptr++; cout<<ptrlж; return 0; }

Крім того показники можна віднімати один від одного визначаючи тим самим к-сть елементів того ж типу на який вказують показники, що розміщені між ними. Також можливі такі відношення і операції (р1,р2 – показники):

р1==р2 р1!=р2 р1<=р2 р1<р2 р1>=p2 р1>р2 p2-p1 p1+n p1-n

15.Застосування операторів new, delete, sizeof до показників.

Оператори new і delete використовуються для роботи із динамічною пам`яттю для простих змінних. Оператор new має вигляд: new тип_об`єкта Наприклад newunsignedshortint виділяє 2 байта для типу. Крім того повертає адресу виділеної пам`яті і ця адреса повинна присвоюватись показнику. Коли пам`ять, що виділяється під змінну більше не потрібна, то її треба звільнити. Для цього використовують оператор delete. Він має такий вигляд: delete ім`я_змінної_показникового_типу Якщо вчасно не звільнити область пам`яті, що виділяється під деякий показник, то може статися "витік пам`яті". Показник на відмінну від області пам`яті є локальною функцією, тому після виходу із функції в якій показник був обов`язковий, цей показник стане недоступним, однак область пам`яті виділена оператором new залишилася. В результаті пам`ять стає недоступною (це і є витік). До завершення виконання пам`ять буде недоступною. І тому оператори new і delete використовуються в парі. Sizeof(показник) - показує у байтах розмір змінної.