手动动态方式:
假设你想要一个宽*高的数组,最有效的方法是只使用一维数组:
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;
}
提升矩阵:
Consider using boost::matrix,如果你有依赖的话。
然后您可以绑定到 boost linear algebra 库。
这里有一些sample code of 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];
Drew Hall 提到这个 C99 功能称为可变长度数组 (VLA),它可能可以在任何现代编译器中启用。