Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Вказівники та посилання






Основні відомості про вказівники

В С++ використовується дві конструкціі для непрямого звертання до змінної: вказівники та посилання. За своєю суттю вони є носіями адреси інформації, яка зберігається в пам'яті.

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

Вказівники - це складний матеріал, і може знадобитись доволі багато часу, щоб опанувати його.

Коли компілятор обробляє оператор визначення змінної, він виділяє пам'ять відповідно до її типу і при необхідності ініціалізує її заданим значенням.

На машинному рівні імена змінних у командах не використовуються, а тільки адреси, сформовані транслятором з використанням імен змінних. Усі звертання в програмі до змінної по її імені заміняються компілятором на адресу області пам'яті, де зберігається значення змінної.

Проте програміст не має доступу до цих адрес, якщо він не використовує спеціальний механізм. Програміст може сам визначати змінні, у яких будуть зберігатися адреси областей пам'яті. Такі змінні називаються вказівниками.

За допомогою вказівників, наприклад, можна:

- обробляти одновимірні та багатовимірні масиви, рядки, символи, структури і масиви структур;

- динамічно створювати нові змінні в процесі виконання програми;

- обробляти зв'язані структури: стеки, черги, списки, дерева, мережі;

- передавати функціям адреси фактичних параметрів;

- передавати функціям адреси функцій в якості параметрів.

Вказівники та посилання

Вказівник (pointer) - спеціальна змінна, в якій зберігається адреса іншої змінної чи програмного об'єкта. Нульове значення (нульова адреса) задається константою NULL. Значення вказівника - це беззнакове ціле, воно повідомляє, де розміщена змінна (її адреса), і нічого не говорить про саму змінну.

Володіння адресою дає вказівнику можливість отримати доступ до значення змінної, яке зберігається за даною адресою. Таке звертання до даних називається непрямим.

Багато програм та ідей покладаються на вказівник як основу для їх розробки, наприклад, зв'язані списки.

Як оголосити вказівник? Змінна типу вказівник оголошується подібно звичайним змінним із застосуванням унарного символу " *".

Загальний синтаксис для оголошення вказівника і ініціалізація його адресою існуючою змінною має вид:

тип * ім’я-вказівника [ = & змінна];

Тут через [] подано необов’язкову ініціалізацію вказівника.

Тип - найменування типу змінної, адресу якої буде містити змінна-вказівник (на яку він буде вказувати). Тип змінної визначає об'єм ОП, що виділяється змінній, з якою пов'язаний вказівник. Для того, щоб машинною програмою обробити (наприклад, прочитати або записати) значення змінної за допомогою вказівника, треба знати адресу її початкового (нульового) байта та кількість байтів, що займає ця змінна. Вказівник містить адресу нульового байта цієї змінної, а тип змінної, що адресується, визначає, скільки байтів, починаючи з адреси, визначеної вказівником, займає це значення.

& змінна - це адреса деякої величини (ціле без знака). Вказівник містить адресу першого байту змінної визначеного типу.

При оголошенні декількох вказівників знак * ставиться біля кожного ідентифікатора.

int *one, *two;

С++ дає можливість оголошувати вказівники двояко:

char *name; char* name;

Ці оголошення є повністю рівносильними. В обох випадках cтворено вказівник на змінну типу char, яка зберігається у деякому місці в пам'яті. Як правило, перше оголошення використовується для створення вказівників, а друге - використовується в прототипах функцій, де оголошуються лише типи без змінних

void function_A (char*, int, short*);

Нижче наведено приклади деяких можливих оголошень вказівників:

int *pi; /* вказівник-змінна на дані типу int */

float *pf; /* вказівник-змінна на дані типу float */

Зверніть увагу на те, що у трьох з наведених оголошень ім'я масиву є константою-вказівником!






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.