如何在C ++中声明动态2D整数数组

时间:2015-04-11 10:46:50

标签: c++

我需要从用户那里获取输入并根据数组的输入长度来决定。例如,

int row, column;    
cin>> row>>column;    
int matrix[row][column];    

但是int matrix[row][column]无效,因为编译器发出错误

"Expression must have a constant value"

另外,如果有人可以指导matrix[row][column]分配给指针的地址。我知道如何使用静态数组但不是动态数据。

2 个答案:

答案 0 :(得分:0)

要声明2d动态数组,您需要指针指针

int row, column;    
cin>> row>>column;    
int** matrix = new int*[row];
for(int i = 0; i < row; ++i)
    matrix[i] = new int[column];

这是因为数组在c ++中是静态的并且在memory.lets中占据一个固定的位置。该数组具有1000个元素。当你声明一个静态数组时,这意味着在为数组保留彼此后,内存中有1000个位置。如果你想再添加一个项目到数组,你会在保留数组的末尾添加这个项目,但是如果那个位置有一些除数组以外的数据,那么这些数据将被删除!!

但是当你将它声明为指针时,你不会存储嵌套在内存中的元素,而是将它们存储在不同的位置,并且每个位置都存储在指针数组中,当你添加新的元素时数组,编译器将搜索内存中的空位置,并将新元素存储在那里。

答案 1 :(得分:0)

使用2D数组来保存矩阵是一个坏主意 - 特别是因为内存分配的循环。 使用大小行*列的一维数组和y * columns + x的访问元素,并将其存储在unique_ptr中以避免公共内存管理问题。

这是我的建议:

uint32_t rows, cols;
std::cin >> rows >> cols; // Check rows and cols are actually numbers
std::unique_ptr<int[]> matrix(new int[rows*cols]);