Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Покажчики на багатовимірні масиви



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

Наприклад, при виконанні оголошення двовимірного масиву int arr2[4][3] у пам'яті виділяється область для збереження значення перемінної arr, що є покажчиком на масив з чотирьох покажчиків. Для цього масиву з чотирьох покажчиків теж виділяється пам'ять. Кожний з цих чотирьох покажчиків містить адресу масиву з трьох елементів типу int, і, отже, у пам'яті комп'ютера виділяється чотири області ля збереження чотирьох масивів чисел типу int, кожний з яких складається з трьох елементів. Таке виділення пам'яті показане на схемі на рис. 9.1.

Таким чином, оголошення arr2[4][3] породжує в програмі три різних об'єкти: покажчик з ідентифікатором arr, безіменний масив з чотирьох покажчиків і безіменний масив із дванадцяти чисел типу int. Для доступу до безіменних масивів використовуються адресні вираження з покажчиком arr.

arr  
в
arr[0] а arr[0][0] arr[0][1] аrr[0][2]
arr[1] а arr[1][0] arr[1][1] аrr[1][2]
arr[2] а arr[2][0] arr[2][1] аrr[2][2]
arr[3] а arr[3][0] arr[3][1] аrr[3][2]
Рис. 9.1. Розподіл пам’яті для двовимірного масиву

Доступ до елементів масиву покажчиків здійснюється з вказівкою одного індексного вираження у формі arr2[2] або *(arr2+2). Для доступу до елементів двовимірного масиву чисел типу int повинні бути використані два індексних вираження у формі arr2[1][2] або еквівалентних їй *(*(arr2+1)+2) і (*(arr2+1))[2]. Варто враховувати, що з погляду синтаксису мови С покажчик arr і покажчики arr[0], arr[1], arr[2], arr[3] є константами і їхнього значення не можна змінювати під час виконання програми.

Розміщення тривимірного масиву відбувається аналогічно й оголошення float arr3[3][4][5] породжує в програмі крім самого тривимірного масиву із шістдесятьох чисел типу float масив з чотирьох покажчиків на тип float, масив із трьох покажчиків на масив покажчиків на float, і покажчик на масив масивів покажчиків на float.

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

Наприклад, звертання до елемента arr2[1][2] можна здійснити за допомогою покажчика ptr2, оголошеного у формі int *ptr2=arr2[0] як звертання ptr2[1*4+2] (тут 1 і 2 це індекси використовуваного елемента, а 4 це число елементів у рядку) або як ptr2[6]. Відзначемо, що зовні схоже звертання arr2[6] виконати неможливо тому, що покажчика з індексом 6 не існує.

Для звертання до елемента arr3[2][3][4] із тривимірного масиву теж можна використовувати покажчик, описаний як float *ptr3=arr3[0][0] з одним індексним вираженням у формі ptr3[3*2+4*3+4] або ptr3[22].

Далі наведена функція, що дозволяє знайти мінімальний елемент у тривимірному масиві. У функцію передається адреса початкового елемента і розміри масиву. Значення, що повертається, – це покажчик на структуру, що містить індекси мінімального елемента.

struct INDEX {int i,

int j,

int k }min_index;

struct INDEX * find_min (int *ptr1, int l, int m int n)

{ int min, i, j, k, ind;

min=*ptr1;

min_index.i=min_index.j=min_index.k=0;

for (i=0; i*(ptr1+ind)

{ min=*(ptr1+ind);

min_index.i=i;

min_index.j=j;

min_index.k=k;

}

}

return &min_index;

}





Дата публикования: 2015-09-17; Прочитано: 443 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...