|
|||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
УКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫМногомерный массив в С – это массив массивов. Например:
int mas[ m ][ n ][ k ];
Можно сказать, что объявлен одномерный массив из m элементов, каждый элемент которого является двумерным массивом, содержащим n*k элементов. В памяти это массив будет расположен так: m массивов n*k
Двумерный массив n*k, в свою очередь, расположен в памяти по строкам: n строк (одномерных массивов по k элементов в каждом)
первая строка вторая строка n– ая строка
Наиболее часто в программах уаотребляются двумерные массивы, плзволяющие обрабатывать данные, пердставленные в табличной форме. Например, если объявлен двумерный массив
int a[ 5 ] [ 4 ];
то это объявление можно рассматривать как объявление одномерного массива а, состоящего из пяти элементов, каждый элемент которого, в свою очередь, состоит из четырех элементов. Имя массива а – это указатель на одномерный массив целых из пяти элементов, каждый из которых содержит адрес соответствующей строки массива. Значение а - адрес первой строки массива.
Так как имя двумерного массива является указателем на массив, то его можно проиндексировать:
a[0] – это адрес строки с индексом 0, a[1] – это адрес строки с индексом 1, a[2] – это адрес строки с индексом 2, a[3] – это адрес строки с индексом 3, a[4] – это адрес строки с индексом 4.
Это означает, что каждый элемент массива а указывает на соответствующую строку, что схематично можно отобразить так:
a[0]
a[1]
a[2]
a[3]
a[4]
Так как a[0] – это адрес строки с индексом 0, а a[i] – это адрес строки с индексом i, то можно записать:
a [0] = & a [0] [0]; …. a[i] = & a[i] [0];
Но а[i] эквивалентно *(a + i) - это адрес строки с индексом i, он смещен от адреса начала на i * 4*sizeof (int) байт, (4 –это количество элементов в строке, или столбцов матрицы).
Для получения адреса элемента двумерного массива, находящегося в строке с индексом i и столбце с индексом j следует к адресу строки матрицы добавить смещение элемента по строке:
*(a + i) + j - это то же, что и & a [ i ] [ j ]
Для получения значения элемента двумерного массива, находящегося в строке с индексом i и столбце с индексом j следует к адресу элемента применить операцию разадресации:
* (*(a + i) + j) - это то же, что и a [ i ] [ j ]
В общем случае вычисление смещения элемента двумерного массива, объявленного как a [ m ] [ n ] следует выполнять по фомуле:
n * i + j, где n – количество столбцов массива (или элементов в строке); i – текущий индекс строки; j– текущий индекс столбца.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |