Використання покажчиків

У мові С ++ широко використовуються дані, що називаються покажчиками.

Покажчики — це змінні, котрі містять адресу пам'яті, розподіленої для іншої змінної. Усі змінні, розглянуті до цього, зберігали якісь значення (дані). Ці дані могли бути різних типів: символьного, цілого, дійсного і т.д. При оголошенні змінної - покажчика необхідно вказати тип даних, адресу яких буде містити змінна, і ім'я покажчика з попередньою зірочкою.

Загальний формат опису покажчика наступний:

тип * ім'я;

де тип — тип значень, на который буде вказувати покажчик;

ім'я — ім'я змінної-покажчика;

* — означає операцію над типом, що читається "покажчик" на тип.

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

int *pn; // покажчик на ціле значення;

float *pf1, *pf2; // два покажчики на дійсні значення;

Покажчики не прив'язують дані до якого-небудь визначеного імені змінної і можуть містити адреси будь-якого неіменованого значення. Існує адресна константа NULL, що означає "порожню" адресу.

У мові С ++ знаходиться усього два оператори, що відносяться до покажчиків:

“&” — оператор " адреса значення ";

“* “ — оператор "значення за адресою".

Оператор " * ", використовуваний разом з покажчиками, витягає значення, на яке вказує змінна, розташована безпосередньо після нього.

Оператор " & ", використовуваний разом з покажчиками, повертає адресу змінної, розташованої безпосередньо після нього.

Покажчики можна оголосити одним з наступних способів:

<тип> *ptr;

<тип> *ptr = <перемінна - покажчик>;

<тип> *ptr =&<ім'я змінної>; // адреса змінної

У програмі це може виглядати в такий спосіб:

int *ptx,b; float y; // оголошені перемінна - покажчик ptx ізвичайні змінні b і y;

float *sp = &y; // покажчику sp привласнюється адреса змінної y

float *p = sp; // покажчику p привласнюється значення (адреса значення),

// яке міститься в змінній sp, тобто адреса змінної y.

При оголошенні покажчиків символ " * " може розташовуватися або перед ім'ям покажчика або записуватися відразу після оголошення типу покажчика і поширює свою дію тільки на одну змінну - покажчик, перед якою він знаходиться, наприклад:

long * pt; long* Uk; int * ki, x, h; // оголошення описів

У разі потреби опису покажчика на комірку довільного типу, замість ідентифікатора типу записується слово void, наприклад:

void *p, *pt; // описані два покажчики на довільний тип даних

Перш ніж використовувати покажчик у програмі, йому обов'язково треба присвоїти адресу якого - небудь даного, тобто проініціалізувати, інакше можуть бути непередбачені результати.

Для доступу до значення змінної, адреса якої зберігається в покажчику, досить у відповідному операторі програми записати ім'я покажчика із символом "*", наприклад:

int *p, *p1; // Оголошені два покажчики на комірку пам'яті int;

int x =12, y=5, m [7 ]; // Оголошені змінні x,y і масив m,

// змінні x,y ініціалізовані

p = &y; // Покажчику p привласнена адреса змінної y.

Тепер, якщо написати оператор виведення на екран у вигляді:

cout << "Адреса р " << p << "Значення по цій адресі= " <<*p;,

тоді виведеться адреса комірки пам'яті, де записана змінна y і значення цієї змінної (тобто 5).

Використовуючи запис x = *p;,одержуємо x=5, тому що *p = y = 5;.

Змінити значення y можна таким чином:

y = 10; // чи *p = 10;

і виконавши операцію

* p= * p+5; // це рівнозначно операції y = y + 5; тобто y = 15.

При оголошенні покажчиків, їм потрібно привласнювати початкові значення (ініціалізувати), при цьому можна або привласнювати адресу об'єкта (змінної), або адресу конкретного місця пам'яті (масиву), або число 0 ( нуль),наприклад:

int *pt = (char *) 0x00147; // Привласнюється адреса комірки

int *arrpt = new int [10]; // Визначається початкова адреса розміщення

// динамічного масиву

сhar *p = 0; // Ініціалізація нулем

Оскільки покажчики — це спеціальні змінні, то в операціях з іншим покажчиками вони можуть використовуватися без символу " * ", тобто без розкриття посилання, наприклад:

float *pt1, *pt2, x=15, m[5];

pt1=&x;

pt2=pt1;

pt1 = m; // або pt1 = &m[0]; m — це ім'я масиву, що

// розглядаєтьсяяк спеціальний покажчик – константа.

Наиведемо програму з використанням покажчиків:

// P2_5.CPPзастосування покажчиків

#include < iostream>

using namespace std;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: