Ручной динамический способ:
Допустим, вам нужен массив width * height, наиболее эффективный способ - просто использовать одномерный массив:
char *matrix = new char[width*height];
Чтобы удалить его:
delete[] matrix;
Чтобы получить к нему доступ:
char getArrayValue(char *matrix, int row, int col)
{
return matrix[row + col*width];
}
Чтобы изменить его:
void setArrayValue(char *matrix, int row, int col, char val)
{
matrix[row + col*width] = val;
}
Матрица повышения:
Подумайте об использовании boost :: matrix , если есть зависимость.
Затем вы можете связать библиотеки линейной алгебры надстроек .
Вот пример примера кода boost :: matrix :
#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;
matrix<char> m (3, 3);
for (unsigned i = 0; i < m.size1 (); ++ i)
for (unsigned j = 0; j < m.size2 (); ++ j)
m (i, j) = 3 * i + j;
В стеке для некоторых компиляторов:
Некоторые компиляторы фактически позволяют создавать массивы в стеке с определенными размерами во время выполнения. g ++ является примером такого компилятора. Вы не можете сделать это по умолчанию VC ++, хотя.
Так что в g ++ это правильный код:
int width = 10;
int height = 10;
int matrix[width][height];
Дрю Холл упомянул, что эта функция C99 называется массивами переменной длины (VLA) и, вероятно, ее можно включить в любом современном компиляторе.