1
    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 []'的指针的下标

4

5 回答 5

2

当你将一个多维数组传递给一个函数时,你必须填写它的所有维度,除了第一个。那就是arr[][X], arr[][X][Y], ...

编译器知道如何根据维度对数组位置进行数学运算。例如,arr[][5]表示每行包含 5 个元素,因此arr[2][0]从一开始就取 10 个元素。所以第一个维度不是必需的,但所有其他维度都是必要的。

于 2012-12-05T21:28:24.050 回答
2

使用一维数组,如 ls. 并自行计算尺寸

于 2012-12-06T07:37:44.303 回答
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;
    }
}
于 2012-12-05T21:14:51.663 回答
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;
    }
}
于 2012-12-05T21:21:25.137 回答
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- 这样循环访问内存中的连续单元。

然后,您的其余代码应使用相同的约定。

但是,如果您为添加到代码中的每个类、模板、设计模式等都获得报酬(或给予积分),那么这种方法并不是最好的。

于 2012-12-05T21:25:03.750 回答