Покажчики, адреси та змінні

Розглянемо ще один фрагмент програми:

int theVariable = 5;

int * pPointer = theVariable;

Мал. 8.3. Схема розподілу пам'яті

Звернення до даних через покажчики

Лістинг 8.2. Звернення до даних через покажчики

1: // Лістинг 8.2. Використання покажчиків

5: typedef unsigned short int USHORT;

8: USHORT myAge; // змінна

9: USHORT * pAge = 0; // покажчик

11: cout <<"myAge: " <

12: pAge = &myAge; // заносимо в pAge адрзс myAge

13: cout <<"*pAge: " <<*pAge <<"\n\n";

14: cout <<"*pAge = 7\n";

15: * pAge = 7; // присвоюємо myAge значення 7

16: cout <<"*pAge: " <<*pAge <<"\n";

17: cout <<"myAge: " <

18: cout <<"myAge = 9\n";

20: cout <<"myAge: " <

21: cout <<"*pAge: " <<*pAge <<"\n";

Аналіз: У програмі оголошені дві змінні: myAge типу unsigned short і pAge, що є покажчиком на цей тип. У рядку 10 змінної pAge присвоюється значення 5, а в рядку 11 це значення виводиться на екран.

У рядку 19 значення myAge знову змінюється. Тепер цієї змінної присвоюється число 9. Потім в рядках 20 і 21 ми звертаємося до цього значення безпосередньо (через змінну) і шляхом разименованія покажчика на неї.

Лістинг 8.3. Що ж записано в покажчику?

1: // Лістинг 8.3. Що ж зберігається в покажчику?

3: #include

8: unsigned short int myAge = 5, yourAge = 10;

9: unsigned short int * pAge = &myAge; // Покажчик

10: cout <<"myAge:\t" <

11: cout <<"&myAge:\t" <<&myAge <<"\t&yourAge;\t" <<&yourAge <<"\n";

12: cout <<"pAge;\t" <

13: cout <<"*pAge:\t" <<*pAge <<"\n";

14: pAge = &yourAge; // переприсвоєному покажчика

15: cout <<"myAge:\t" <

16: cout <<"&myAge:\t" <<&myAge <<"\t&yourAge:\t" <<&yourAge <<"\n";

17: cout <<"pAge:\t" <

18: cout <<"*pAge:\t" <<*pAge <<"\n";

19: cout <<"&pAge:\t" <<&pAge <<"\n";

myAge: 5 yourAge: 10

myAge: 0x355C yourAge: 0x355E

myAge: 5 yourAge: 10

myAge: 0x355C yourAge: 0x355E

(Ваші результати можуть відрізнятися від наведених.)

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

unsigned short int * pPointer = 0;

unsigned short int theVariable = 5;

unsigned short int * pPointer = theVariable;

Щоб разименовать покажчик, встановіть перед його ім'ям оператор разименовиванія (*):

unsigned short int theValue = * pPointer

Для чого потрібні покажчики

• для розміщення даних в вільних областях пам'яті і доступу до них;

• для доступу до змінних і функцій класів;

• для передачі параметрів в функції по посиланню.

Частина, що залишилася глави присвячена динамічному управління даними і операціями зі змінними і функціями класів.

Схожі статті