Двумерный динамический массив представляет собой массив указателей на уже одномерные массивы.
int**arr = new int*[row]; // создаем массив указателей на другие массивы
Созданный массив нужно соответственно заполнить.
for (int i = 0; i < row; i++) // заполняем массив указателями
{
arr[i] = new int[col];
}
for (int i = 0; i < row; i++) // удаление массива
{
delete [] arr[i];
}
delete [] arr;
Пример заполнения двумерного массива. Заполняем массивы на которые ссылается наш изначальный массив указателей.
for (int i = 0; i < row; i++) // заполнение массива
{
for (int x = 0; x < col; x++)
{
arr[i][x] = rand() % 20;
}
}
for (int i = 0; i < row; i++) // вывод массива
{
for (int x = 0; x < col; x++)
{
cout << arr[i][x] << "\t|\t";
}
cout << endl;
}
Так как массив динамический, мы можем указывать количество элементов во время компиляции.
int row;
int col;
cout << "Enter rows: "; // ввод кол-ва строк/колонок
cin >> row;
cout << endl << "Enter columns: ";
cin >> col;
cout << "\n\n";
cout << row << " rows" << endl;
cout << col << " columns" << endl << endl;
int**arr = new int*[row]; // массив указателей на другие массивы
for (int i = 0; i < row; i++) // заполняем массив указателями
{
arr[i] = new int[col];
}
for (int i = 0; i < row; i++) // заполнение массивов
{
for (int x = 0; x < col; x++)
{
arr[i][x] = rand() % 20;
}
}
for (int i = 0; i < row; i++) // вывод массива
{
for (int x = 0; x < col; x++)
{
cout << arr[i][x] << "\t|\t";
}
cout << endl;
}
for (int i = 0; i < row; i++) // удаление (очистка) массива
{
delete [] arr[i];
}
delete [] arr;