МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Масиви покажчиківУ мові С елементи масивів можуть мати будь-який тип, і, зокрема, можуть бути покажчиками на будь-який тип. Розглянемо кілька прикладів з використанням покажчиків. Наступні оголошення перемінних int a[ ]={10,11,12,13,14,}; int *p[ ]={a, a+1, a+2, a+2, a+3, a+4}; int **pp=p; породжують програмні об'єкти, представлені на схемі на рис. 9.2. При виконанні операції pp-p одержимо нульове значення, тому що посилання pp і p рівні і вказують на початковий елемент масиву покажчиків, зв'язаного з покажчиком p ( на елемент p[0]). Після виконання операції pp+=2 схема зміниться і прийме вид, зображений на рис.9.3.
Результатом виконання вирахування pp-p буде 2, тому що значення pp є адресою третього елемента масиву p. Посилання *pp-a теж дає значення 2, тому що звертання *pp є адресою третього елемента масиву a, а звертання a є адресою початкового елемента масиву a. При звертанні за допомогою посилання **pp одержимо 12 - це значення третього елемента масиву a. Посилання *pp++ дасть значення четвертого елемента масиву p тобто адресу четвертого елемента масиву a. Якщо вважати, що pp=p, то звертання *++pp це значення першого елемента масиву a (тобто значення 11), операція ++*pp змінить зміст покажчика p[0], таким чином, що він стане рівним значенню адреси елемента a[1]. Складні звертання розкриваються зсередини. Наприклад, звертання *(++(*pp)) можна розбити на наступні дії: *pp дає значення початкового елемента масиву p[0], далі це значення інкрементирується ++(*p) у результаті чого покажчик p[0] стане дорівнювати значенню адреси елемента a[1], і остання дія це вибірка значення по отриманій адресі, т.е. значення 11. У попередніх прикладах був використаний одномірний масив, розглянемо тепер приклад з багатовимірним масивом і покажчиками: int a[3][3]={ { 11,12,13 }, { 21,22,23 }, { 31,32,33 } }; int *pa[3]={ a,a[1],a[2] }; int *p=a[0]; Доступ до елемента a[0][0] можливо одержати по покажчиках a, p, pa за допомогою наступних посилань: a[0][0], *a, **a[0], *p, **pa, *p[0]. Розглянемо тепер приклад з використанням рядків символів. Оголошення змінних charc[ ]={ "abs", "dx", "yes", "no" }; char **cp[ ]={ c+3, c+2 , c+1 , c }; char ***cpp=cp; КОНТРОЛЬНІ ПИТАННЯ 1. Для чого призначені стандартні функції mallos() і free ()? 2. Які операції можна застосовувати до покажчиків на елементи того самого масиву? 3. Які дії можна робити над покажчиками і цілими? 4. Які дії не можна робити над покажчиками? 5. Що ви знаєте про покажчики на void?
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|