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


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


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


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


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


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


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


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


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


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



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






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

У мові С між покажчиками і масивами існує тісний зв'язок. Наприклад, коли з'являється масив у виді int array[25], то цим визначається не тільки виділення пам'яті для двадцяти п'яти елементів масиву, але і для покажчика з ім'ям array, значення якого дорівнює адресі першого (нульового) елемента масиву, тобто сам масив залишається безіменним, а доступ до елементів масиву здійснюється через покажчик з ім'ям array. З погляду синтаксису мови покажчик array є константою, значення якої можна використовувати у виразах, але змінити це значення не можна.

Оскільки ім'я масиву є покажчиком, те припустимо, наприклад, таке присвоювання:

int array[25];

int *ptr;

ptr=array;

Тут покажчик ptr установлюється на адресу першого елемента масиву, причому присвоювання ptr=arrey можна записати в еквівалентній формі ptr=&arrey[0].

Для доступу до елементів масиву існує два різних способи.

Перший спосіб зв'язаний з використанням звичайних індексних виразів у квадратних дужках, наприклад, array[16]=3 або array[і+2]=7. При такому способі доступу записуються два вирази, причому другий вираз розташовується в квадратних дужках. Один з цих виразів повинен бути покажчиком, а другий - виразом цілого типу. Послідовність запису цих виражень може бути будь-якою, але в квадратних дужках записується вираз, який іде другим. Тому записи array[16] і 16[array] будуть еквівалентними і позначають елемент масиву з номером шістнадцять.

Покажчик, використовуваний в індексному виразі не обов'язково повинний бути константою, що вказує на який-небудь масив, це може бути і змінна. Зокрема після виконання присвоювання ptr=array доступ до шістнадцятого елемента масиву можна одержати за допомогою покажчика ptr у формі ptr[16] або 16[ptr].

Другий спосіб доступу до елементів масиву зв'язаний з використанням адресних виразів і операції розадресації у формі *(array+16)=3 або *(array+і+2)=7. При такому способі доступу адресне вираження рівне адресі шістнадцятого елемента масиву теж може бути записано різними способами *(array+16) або *(16+array).

При програмній реалізації перший спосіб приводиться до другого, тобто індексне вираження перетвориться до адресного. Для приведених прикладів array[16] і 16[array] перетворяться в *(array+16).

Для доступу до початкового елемента масиву (тобто до елемента з нульовим індексом) можна використовувати просте значення покажчика array або ptr. Кожне з присвоювань

*array = 2;

array[0] = 2;

*(array+0) = 2;

*ptr = 2;

ptr[0] = 2;

*(ptr+0) = 2;

присвоює початковому елементові масиву значення 2, але швидше всього виконується присвоювання *array=2 і *ptr=2, тому що в них не потрібно виконувати операції додавання.




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

<== попередня сторінка | наступна сторінка ==>
ТЕОРЕТИЧНА ЧАСТИНА | Покажчики на багатовимірні масиви.

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

 

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


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