МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||||||||||||||||||||||||||
Покажчики на багатовимірні масиви.Покажчики на багатомірні масиви в мові С - це масиви масивів, тобто такі масиви, елементами яких є масиви. При оголошенні таких масивів у пам'яті комп'ютера створюється кілька різних об'єктів. Наприклад, при виконанні оголошення двовимірного масиву int arr2[4][3] у пам'яті виділяється область для збереження значення перемінної arr, що є покажчиком на масив з чотирьох покажчиків. Для цього масиву з чотирьох покажчиків теж виділяється пам'ять. Кожний з цих чотирьох покажчиків містить адресу масиву з трьох елементів типу int, і, отже, у пам'яті комп'ютера виділяється чотири області ля збереження чотирьох масивів чисел типу int, кожний з яких складається з трьох елементів. Таке виділення пам'яті показане на схемі на рис. 9.1. Таким чином, оголошення arr2[4][3] породжує в програмі три різних об'єкти: покажчик з ідентифікатором arr, безіменний масив з чотирьох покажчиків і безіменний масив із дванадцяти чисел типу int. Для доступу до безіменних масивів використовуються адресні вираження з покажчиком arr.
Доступ до елементів масиву покажчиків здійснюється з вказівкою одного індексного вираження у формі 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; }
|
||||||||||||||||||||||||||||||||
|