我需要从用户那里获取输入并根据数组的输入长度来决定。例如,
int row, column;
cin>> row>>column;
int matrix[row][column];
但是int matrix[row][column]
无效,因为编译器发出错误
"Expression must have a constant value"
另外,如果有人可以指导matrix[row][column]
分配给指针的地址。我知道如何使用静态数组但不是动态数据。
答案 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]);