Голый Мужик
Мыслитель
(9632)
15 лет назад
Двумерный массив (в понимании C++) в динамической памяти создать не удастся. Двумерные массивы хранят данные последовательно: такой массив можно представить в виде одномерного длиной N x M (N - длина, M - высота) , в котором индекс элемента (i, j) вычисляется по формуле i * M + j. Очевидно, что для фунциклирования индексации в двумерных массивах необходима информация о количестве строк. Массивы C++ хранят размеры только на этапе компиляции, в процессе выполнения получить эту информацию невозможно.
Таким образом, в динамической памяти C++ можно создавать лишь ступенчатые (jagged) массивы, а вернее блоки памяти, содержащие указатели на блоки памяти.
int ** array = new int* [M];
for (int i = 0; i < M; i++)
array[ i ] = new int[N];
Память освобождается аналогично, но в обратном порядке:
for (int i = 0; i < M; i++)
delete[] array[ i ];
delete[] array;
Но лучше воспользоваться STL и создавать векторы векторов:
#include <vector>
using namespace std;
// Пробелы после < и > обязательны
typedef vector< vector<int> > Array;
void main()
{
int m = 10;
int n = 20;
// Создаём вектор M элементов и прототипиуем его элементы вектором N элементов
Array a(m, vector<int>(n));
a[1][2] = 3;
}
Плюсы: можно увеличивать размерность и не нужно освобождать память.
unsigned short int n,m,i,j;
float mass[n][m];
где значения n,m вводятся с клавы во время выполнения программы
Покажите пожалуйста пример размещения массива в динамической памяти, а то я в книге нашёл лишь бесполезных полстраницы...