Перейти к основному содержимому

Создание двухмерных динамических массивов

осторожно

Статья доделывается. Взята как есть из предыдущей версии методики.

В динамической области памяти можно создавать двумерные массивы с помощью операции new или функции mаllос. Остановимся на первом варианте, поскольку он более безопасен и прост в использовании.

Обращение к элементам динамических массивов производится точно так же, как к элементам "обычных", с помощью конструкции вида a[i][j]a[i][j].

Универсальный способ выделения памяти под двумерный массив, когда обе его размерности задаются на этапе выполнения программы, приведен ниже:

int nrow, ncol;
cout << " Введите количество строк и столбцов :";
cin >> nrow >> ncol;
int **a = new int *[nrow]; // 1
for(int i = 0; i < nrow; i++) // 2
a[i] = new int [ncol]; // 3

Для того чтобы понять, отчего динамические массивы описываются именно так, нужно разобраться в механизме индексации элемента массива. Поскольку для доступа к элементу массива применяется две операции разадресации, то переменная, в которой хранится адрес начала массива, должна быть указателем на указатель.

В операторе 1 объявляется переменная типа "указатель на указатель на int" и выделяется память под массив указателей на строки массива (количество строк — nrow). В операторе 2 организуется цикл для выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку двумерного массива. Каждая строка состоит из ncol элементов типа int (рис. 1).

Освобождение памяти из-под массива с любым количеством измерений выполняется с помощью операции delete [], например: delete [] a;

Рис. 1. Схема динамической области памяти, выделяемой под массивы