Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / 3_кол / Лекції / лекция_C++ (13_1) у.doc
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
349.18 Кб
Скачать

Тема 13: Покажчики. Зв'язок покажчика з масивами. Динамічна пам'ять

План

1. Покажчики.

2. Способи ініціалізації покажчиків.

3. Зв’язок покажчика з одновимірним масивом.

4. Двувимірний масив.

5. Динамічна пам’ять.

1. Покажчики

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

<тип> *<имя>

Наприклад, коди (директиви) 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.

2. Способи ініціалізації покажчиків

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

int *p, x;

p = &x;

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

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

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

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

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

Соседние файлы в папке Лекції