Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоритические сведения для Лабораторной работы 7 Программирование.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
141.82 Кб
Скачать

Указатели и многомерные массивы

Многомерный массив в С – это массив массивов. Например:

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][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0 ] a[2][1] a[2][2] a[2][3]

a[3][0] a[3][1] a[3][2] a[3][3]

a[4][0] a[4][1] a[4][2] a[4][3]

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– текущий индекс столбца.