Хелпикс

Главная

Контакты

Случайная статья





Двумерные массивы



Двумерные массивы

Размерность массива может быть больше единицы (напомним, размерность массива определяется количеством индексов, с помощью которых реализуется доступ к элементу массива). В этом случае говорят о многомерных массивах. Объявление многомерного массива выполняется  также просто, как и объявление одномерного массива, с той лишь разницей, что теперь для массива указывается размер по каждому из индексов. Для каждого индекса используется собственная пара квадратных скобок. При объявлении массива размер массива по соответствующему индексу также указывается в отдельных квадратных скобках. Среди многомерных массивов самым простым является двумерный массив. В известном смысле двумерный массив – это массив из одномерных массивов. Например, инструкцией double n[4] [5] объявляется двумерный массив действительных чисел двойной точности размером 4х5. Как и ранее, чтобы обратиться к отдельному элементу массива, необходимо после имени массива указать индексы этого элемента (каждый индекс в отдельных квадратных скобках). Индексация по каждому индексу начинается с нуля. Ниже приведен код программы, в которой двумерный массив заполняется случайными числами с последующим выводом этих значений на экран.

 #include <iostream>

using namespace std;

int main () {

int n[4] [5];

for (int i=0; i<5; i++) {

  for (int j=0; j<5; j++) {

     n[i] [j]=rand() % 10;

     cout<<n[i] [j]<<” ”;}

cout<<”\n”;}

return 0;

}

Значения выводятся построчно в соответствии со структурой массива. Первый индекс массива определяет строку, второй индекс определяет столбец в этой строке. Так элемент n[1] [3] находится на пересечении второй строки и четвертого столбца.

Эффективность работы с двумерными (и многомерными) массивами напрямую связана с тем, как такие массивы технически реализуются в области памяти. Другими словами, для понимания основных механизмов в использовании массивов необходимо иметь четкое представление о природе массивов в С++. В частности, при работе с двумерными массивами с успехом могут использоваться указатели. Однако в данном случае принципиально помнить о том, что такое на самом деле двумерный массив и как для его элементов в памяти выделяется место. Выше отмечалось, что двумерный массив в С++ - это обычный массив, элементами которого, в свою очередь, являются массивы. Размерность первого «базового» массива при объявлении определяется числом в первых квадратных скобках, а размерность массивов-элементов – число во вторых квадратных скобках. Таким образом, формально указав имя массива и только первый индекс элемента, получаем ссылку на соответствующую строку двумерного массива. Более точно, название двумерного массива с одним лишь первым индексом есть не что иное, как указатель на первый элемент соответствующей строки массива. Это важное замечание для понимания принципов использования указателей с двумерными (многомерными) массивами.

Ниже приведен пример использования указателей при работе с двумерными массивами.

#include <iostream>

using namespace std;

int main() {

int n[4] [5], *p;

for (int i=1; i<4; i++) {

      p=n[i];

      for (int j=0; j<5; j++){

          *(p+j)=5*i+j+1;

          printf ( ”%4d”, n[i] [j]);}

    printf (”\n”);}

return 0;

}

В программе командой  int n[4] [5], *p объявляется двумерный целочисленный массив n и указатель p на целое число. Далее в рамках оператора цикла for (int i=1; i<4; i++) выполняется команда p=n[i], которой указателю p в качестве значения присваивается адрес первого элемента строки двумерного массива с номером i. При фиксированном индексе строки i выполняется цикл for (int j=0; j<5; j++), которым перебираются все элементы массива в данной строке. Для каждой пары значений индексов i и j выполняются команды *(p+j)=5*i+j+1 и printf ( ”%4d”, n[i] [j]). Первая из команд предназначена для записи значения соответствующего элемента массива. Ссылка на элемент выполнена через указатель p с использованием адресной арифметики. Поскольку p есть ссылка на первый элемент в строке с номером i, то результатом инструкции p+j является адрес элемента с индексом j в этой строке, т.е. адрес элемента n[i] [j]. Значение элемента получаем с помощью оператора *. Командой printf ( ”%4d”, n[i] [j]) значение выводится на экран. В данном случае массив заполняется числами от 1 до 20. Чтобы выдержать форматирование выводимых данных (числа должны располагаться строго по вертикали и горизонтали, без сдвигов из-за различной ширины чисел), использована функция prtinf(). Первый аргумент ”%4d” означает, что для вывода каждого числа отводится 4 позиции, второй аргумент – выводимое на экран значение. Командой printf (”\n”) осуществляется переход к новой строке. Результат выполнения программы будет следующим:

 

 

 

       

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.