void printMatrix(int matrix[][], int edge)
{
int i,j;
for (i=0; i<edge; ++i) {
for (j=0; j<edge; ++j) {
std:cout<<matrix[i][j]<<" ";
}
std::cout<<std::endl;
}
}
如果我在java中,似乎很好,但在c ++中,它表明 指向不完整类型'int []'
的指针的下标答案 0 :(得分:2)
将多维数组传递给函数时,必须填写所有尺寸,第一个除外。那是arr[][X], arr[][X][Y], ...
。
编译器知道如何根据维度进行数组位置数学运算。例如,arr[][5]
表示每行包含5个元素,因此arr[2][0]
将从一开始就获取10个元素。所以第一个维度不是必需的,而是所有其他维度 - 都是。
答案 1 :(得分:2)
使用一维数组作为列表。 并自己计算尺寸
答案 2 :(得分:1)
根本不应该使用原始数组。 std::array
要好得多。如果您希望大小不属于该类型,则应使用std::vector
。在某些情况下,您可能需要使用原始数组或原始指针,但这不是您应该担心的初学者。
这是一个如何做事的例子(假设C ++ 11支持)。这也使用了const正确性和新的foreach特性。我不记得确切的语法,但看起来应该是这样的。
void printMatrix(const std::vector<std::vector<int>> matrix)
{
for(const auto& row : matrix){
for(int x : row){
std::cout << x << " ";
}
std::cout<<std::endl;
}
}
答案 3 :(得分:0)
C ++不传递数组的大小或维数,它只传递数组开头的地址(即指针)。您可以通过使用带引用的模板函数来解决此问题。这样,矩阵的大小在编译时就已知。
template<int X, int Y>
void printMatrix(int (&matrix)[X][Y], int edge)
{
int i,j;
for (i=0; i<edge; ++i) {
for (j=0; j<edge; ++j) {
std:cout<<matrix[i][j]<<" ";
}
std::cout<<std::endl;
}
}
答案 4 :(得分:0)
如果你有一个方阵,你可以这样做:
void printMatrix(int matrix[], int edge)
{
int i,j;
for (j=0; j<edge; ++j) {
for (i=0; i<edge; ++i) {
std:cout << matrix[j*edge + i] << " ";
}
std::cout << std::endl;
}
}
基本上,在一维数组中一个接一个地存储行(或列,由你决定)。
请注意,内部循环遍历j
- 这样循环访问内存中的连续单元格。
然后您的其余代码应使用相同的约定。
如果您为代码中添加的每个类,模板,设计模式等付费(或给定积分),这种方法并不是最好的方法。