Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / Лабораторні роботи / Лабораторна робота 6.doc
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
89.6 Кб
Скачать

Лабораторна робота № 6

Тема: Обробка двомірних динамічних масивів.

Мета: вивчити поняття «покажчик», правила створення і прийоми обробки динамічних масивів на прикладі двомірного масиву.

6. 1. Короткі теоретичні відомості Особливості застосування покажчиків

Звернення до об'єктів будь-якого типу в мові C може проводитися по імені, як ми досі робили, і по покажчику (непряма адресація).

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

Покажчик оголошується таким чином:

тип * ID покажчика;

Перед використанням покажчик має бути ініційований або конкретною адресою, або значенням NULL (0) - відсутність покажчика.

З покажчиками пов'язано дві унарні операції: & і *. Операція & означає «узяти адреса», а операція разадресации * - «значення, розташоване за адресою», наприклад:

int x, *y; // х - змінна типу int, у - покажчик типу int

y = &x; // y - адреса змінної x

*y = 1; // за адресою y записати 1, в результаті x = 1

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

Операції складання, віднімання і порівняння (більше/менше) мають сенс тільки для послідовно розташованих даних - масивів. Операції порівняння «==» і «!=» мають сенс для будь-яких покажчиків, тобто якщо два покажчики рівні між собою, то вони вказують на одну і ту ж змінну.

Зв'язок покажчиків з масивами

Покажчики і масиви тісно пов'язані між собою. Ідентифікатор масиву є покажчиком на його перший елемент, тобто для масиву int a[10], вирази a і a[0] мають однакові значення, оскільки адреса першого (з індексом 0) елементу масиву - це адреса початку розміщення його елементів в ОП.

Нехай оголошені - масив з 10 елементів і покажчик типу double :

double a[10], *p;

якщо p = a; (встановити покажчик p на початок масиву a)то наступні звернення: a[i], *(a+i) і *(p+i) еквівалентні, тобто для будь-яких покажчиків можна використовувати дві еквівалентні форми доступу до елементів масиву : a[i] і *(a+i). Очевидна еквівалентність наступних виразів :

&a[0] ( &(*p) ( p

Декларація багатовимірного масиву :

тип ID[розмір 1][розмір 2].[розмір N];

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

int a[2][3] = 0,1,2,3,4,5;

у ОП буде розміщений таким чином:

a[0][0]=0, a[0][1]=1, a[0][2]=2, a[1][0]=3, a[1][1]=4, a[1][2]=5.

Якщо в списку ініціалізаторів даних не хапає, то відповідному елементу привласнюється значення 0.

Покажчики на покажчики

Зв'язок покажчиків і масивів з одним виміром справедливо і для масивів з бóльшим числом вимірів.

Якщо розглядати попередній масив (int a[2][3];) як масив двох масивів розмірністю по три елементи кожен, то звернення до елементу а[i][j] відповідає эквива-лентное вираження *(*(а+i)+j), а оголошення цього масиву з використанням покажчиків матиме вигляд

int **а;

Таким чином, ім'я двомірного масиву - ID покажчика на покажчик.