КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Вказівки
Змінні вказівки (або, як їх звичайно називають, просто вказівки) – це змінні, що містять адресу даних. Коли компілятор обробляє оператор визначення змінної, наприклад, int x = 5;, він виділяє пам'ять відповідно до типу (int) і ініціалізує її вказаним значенням (5). Всі звернення в програмі до змінної по її імені (x) замінюються компілятором на адресу області пам'яті, в якій зберігається значення змінної. Програміст може визначити власні змінні для зберігання адрес областей пам'яті. Такі змінні називаються вказівками. Отже, вказівки призначені для зберігання адрес областей пам'яті. У C++ розрізняють три види вказівок – вказівки на об'єкт, на функцію та на void, що відрізняються властивостями і набором допустимих операцій. Вказівка не є самостійним типом, вона завжди пов'язана з яким-небудь іншим конкретним типом. Вказівка на функцію містить адресу в сегменті коду, по якій розташовується виконуваний код функції, тобто адресу, по якій передається управління при виклику функції. Вказівки на функції використовуються для непрямого виклику функції (не через її ім'я, а через звернення до змінної, що зберігає її адресу), а також для передачі імені функції в іншу функцію як параметр. Вказівка функції має тип «вказівка функції, що повертає значення заданого типу і що має аргументи заданого типу»:
тип (*ім'я) ( список_типів_аргументів );
Наприклад, оголошення:
int (*fun) (double, double);
задає вказівку з ім'ям fun на функцію, що повертає значення типу int і що має два аргументи типу double. Вказівка на об'єкт містить адресу області пам'яті, в якій зберігаються дані певного типу. Просте оголошення вказівки на об'єкт має вид:
тип *ім’я;
де тип може бути будь-яким, окрім посилання та бітового поля, причому тип може бути до цього моменту тільки оголошений, але ще не визначений. Зірочка відноситься безпосередньо до імені, тому для того, щоб оголосити декілька вказівок, потрібно ставити її перед ім'ям кожного з них. Наприклад, в операторі
int *a, b, *с;
описуються дві вказівки на ціле з іменами а та c, а також ціла змінна b. До роботи з вказівками відносяться два головних оператори: * оператор "значення за адресою"; & оператор "адреса значення". Це бінарні оператори, що стоять перед змінною або виразом. Розмір вказівки залежить від моделі пам'яті. Можна визначити вказівку на вказівку і так далі. Вказівка на void застосовується в тих випадках, коли конкретний тип об'єкту, адресу якого потрібно зберігати, не визначений (наприклад, якщо в одній і тій же змінній в різні моменти часу потрібно зберігати адреси об'єктів різних типів). Вказівці на void можна привласнити значення вказівки будь-якого типу, а також порівнювати його з будь-якими вказівками, але перед виконанням яких-небудь дій з областю пам'яті, на яку він посилається, потрібно перетворити його до конкретного типу явним чином. Вказівка може бути константою або змінною, а також вказувати на константу або змінну. Розглянемо приклади:
int x; // ціла змінна const int cx = 1; // ціла константа int *px ; // вказівка на цілу змінну const int *pcx; // вказівка на цілу константу int *const ср = &x; // вказівка-константа на цілу змінну const int* const срс = &cx; // вказівка-константа на цілу константу
У рядку int *px резервується місце для змінної-вказівки з ім’ям px.Якщо при оголошенні змінної перед ім’ям з’являється *, то це означає, що вона оголошується як змінна-вказівка. px –вказівкана ціле, тобто px – змінна, що містить адресу цілих значень. Якщо необхідно працювати з плаваючою точкою, то можна оголосити вказівку із відповідним типом, наприклад,
float *point;
Як видно з прикладів, модифікатор const, що знаходиться між ім'ям вказівки та зірочкою, відноситься до самої вказівки і забороняє її зміну, а const зліва від зірочки задає постійність значення, на яке вона вказує. Для ініціалізації вказівок використовується операція отримання адреси &.
|