Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОКАЖЧИКИ 13.ppt
Скачиваний:
16
Добавлен:
30.05.2020
Размер:
2.26 Mб
Скачать

Покажчик – це змінна для адреси елементу пам'яті. Загальний формат оголошення покажчика має вигляд:

<тип> *<имя>.

Наприклад, коди (директиви) int *p; float *r; виділяють дві області пам'яті p і r розміром два байти. При цьому змінна p призначена для запису адрес змінних типа int, а змінна r призначена для адрес змінних типа float.

Програма 1. Оголошує покажчик. Видає випадкову інформацію з області пам'яті, яка виділяється під покажчик.

void main()

{ int *p; // Визначається змінна p, яка є покажчиком. clrscr ();

cout << "В змінній p міститься випадкова адреса: “ << p << “\n”;

getch(); }

Після виконання цієї програми на екрані видачі результатів з'явиться наступне повідомлення:

У змінній p міститься випадкова адреса: 0xNNNNNNNN

При оголошенні покажчика, наприклад int *p, виділяється пам'ять розміром два байти, в яких і знаходиться випадкове число A. Це число комп'ютер інтерпретує як адреса пам'яті для запису цілого числа. Число з адреси A, яка записана в покажчику, доступно для комп'ютера. Отже, при оголошенні покажчика користувачеві доступні дві області пам'яті.

Перша область відводиться під покажчик. Ця область пам'яті має ім'я р. Друга область визначається адресою, яка зберігається в покажчику. Ім'я другої області пам'яті – *p. Причому адреса змінної *p рівний A, тобто справедлива тотожність &(*p)?A.

Зауваження 1. Використовувати покажчик, який не ініціалізувався (не задається) програмою, не можна!!!

Доступ до інформації з адрес, які зберігаються в покажчиках типа int *p, float *r і т. д., реалізується, наприклад, директивами:

*p = 6 – в елемент пам'яті, адреса якої зберігається в покажчику p, заслати число 6;

cout << *p – видати на екран інформацію з елементу пам'яті, адреса якої зберігається в покажчику р.

Схема пам'яті до і після виконання коди *p = 6 дана на мал.1.

Мал. 1

Для видачі покажчика на екран або для введення його з клавіатури використовується формат %p.

Програма 2. Оголошує покажчик. Видає інформацію з областей пам'яті p і *p, які доступні програмі.

void main()

{ int *p; clrscr();

printf("У змінній p міститься не контрольований програмою ” “адрес:\n %p" " – шістнадцятиричний запис адреси у форматі \n"

" який визначає процесор. \n\n",p);

printf("У змінній p міститься не контрольований програмою “ “адрес:\n %ld" " – десятковий запис адреси. \n\n", p); printf("У адресі %p міститься випадкове число %d ", p *p);

*p = 10;

printf("\n\nВ адресі %p міститься число %d," " яке визначається програмою. \n", p *p); getch(); }

Після закінчення роботи даної програми на екрані монітора з'явиться вміст змінних p, *p до ініціалізації *p і після її ініціалізації, тобто після виконання коди *p = 10.

Покажчику можна привласнити адресу однотипної змінної, яка оголошена в програмі. Наприклад, після виконання директив

int *p, x; p = &x;

у змінну p засилає адреса змінної x.

Покажчику можна привласнити значення NULL як ознаку непідготовленості покажчика.

Покажчик можна ініціалізувати, використовуючи директиву new. Наприклад, директива p = new int, де p – покажчик, виділяє пам'ять для запису цілого числа. Адреса цієї області пам'яті заноситься в покажчик p і дана пам'ять ставиться під контроль програми.

У покажчик можна вводити інформацію з клавіатури, використовуючи директиву введення формату scanf() із специфікацією %p.

Програма 3. Оголошує покажчик. Покажчику привласнюється адреса однотипної змінної.

void main() { int *p;

// Визначається змінна p для запису адрес комірок

 

 

// у яких можна заносити цілі числа.

int x = 222;

// Виділяє пам'ять для запису цілих чисел.

clrscr();

 

 

cout << "

До ініціалізації покажчика!!!!: \n";

cout << "В адресі " << p << " міститься число *p= " << *p << "\n\n";

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

// змінній, яка оголошена в програмі. cout << "\n\n Після ініціалізації p= &x!!!: \n"; cout << "Адреса x = " << &x << "\n";

cout << " У покажчику p адрес= " << p << “, у якому число= “

<< *p <<" \n";

getch(); }

Схема пам'яті після оголошення змінних дана на мал. 2.

Схема пам'яті після виконання коду p = &x приведена на мал. 3.

Програма 4. Оголошує покажчик. Для ініціалізації покажчика використовується директива new.

void main()

 

{ int *p;

// Визначається змінна p для запису адрес вічок

// у яких можна заносити цілі числа.

clrscr();

cout << " Стан пам'яті до ініціалізації!!!: \n\n";

cout << "В неконтрольованій адресі " << p << " міститься випадкове число " << *p << "\n";

*p = -8; // В неконтрольовану адресу засилаємо число. cout << "\nВ неконтрольованій адресі " << p

<< " міститься визначене програмою число " << *p << " \n"; cout << "Натискуй будь-яку клавишу\n";

getch();

p = new int; // Виділяється пам'ять для запису цілого числа.

cout << "В контрольованій адресі " << p << " міститься випадкове « << " число " << *p << " \n";

cout << "Натискуй будь-яку клавишу\n"; getch();

*p = -777;

cout << "\nВ контрольованій адресі " << p

<< " міститься визначене програмою число " << *p << " \n"; getch(); }

}

Соседние файлы в предмете Объектно ориентированное программирование