Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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

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

Наприклад, при виконанні оголошення двовимірного масиву 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;

}




Переглядів: 752

<== попередня сторінка | наступна сторінка ==>
Зв’язок між покажчиками та масивами | Операції з покажчиками

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.003 сек.