русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-11-28; переглядів: 768.


Новачки C, часом, плутаються з відмінністю між двовимірним масивом і масивом покажчиків, такому як name, у вищенаведеному прикладі. Маючи два визначення

int a[10][20];

int *b[10];

a[3][4] і b[3][4], обидва, являються синтаксично-правильними посиланнями на певну одиницю. Але a, це справжній двовимірний масив: під нього відведено 200 положень розміруint, і використовується традиційне прямокутне обчислення індексів 20*row+col для того, щоб віднайти елемент a[row,col]. Проте, у випадку з b, таке визначення виділяє тільки 10 покажчиків, не ініціалізуючи їх; ініціалізацію потрібно здійснити явно, або статично, або ж за допомогою коду. Припускаючи, що кожний елемент b вказує на масив з двадцяти елементів, тоді буде відведено місце під 200 int, плюс десять комірок для покажчиків. Важливою перевагою масиву покажчиків є те, що рядки масиву можуть бути різноманітного розміру. Тобто, кожний елемент b не обов'язково повинен вказувати на вектор з двадцяти елементів; деякі можуть показувати на два елементи, інші — на п'ятдесят, а деякі — на жоден. Хоч ми й обійшлися в цій дискусії цілими числами, найчастіше використання масиву покажчиків полягає в збереженні символьних ланцюжків різноманітної довжини, як у функції month_name. Порівняйте оголошення і малюнок для масиву покажчиків

char *name[] = { "Illegal month", "Jan", "Feb", "Mar" };

 

name:

+-----+ +-----------------+

| *--|-----> | Illegal month\0 |

| | +-----------------+

| | +-------+

| *--|-----> | Jan\0 |

| | +-------+

| | +-------+

| *--|-----> | Feb\0 |

| | +-------+

| | +-------+

| *--|-----> | Mar\0 |

+-----+ +-------+

з аналогічними для двовимірного масиву:

char aname[][15] = { "Illegal month", "Jan", "Feb", "Mar" };

 

aname:

+----------------------------------------------------------------+

| Illegal month\0 Jan\0 Feb\0 Mar\0 |

+----------------------------------------------------------------+

0 15 30 45

Вправа 5-9. Перепишіть наново функції day_of_year і month_day із покажчиками замість індексів.


<== попередня лекція | наступна лекція ==>
Ініціалізація масиву покажчиків | Аргументи командного рядка


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн