C++ 2D Array - 对于数组下标,出错无效类型'int [int]'

Sud*_*noi 0 c++ arrays

我试图在C++中使用2D数组创建MxN矩阵.

createMatrix()函数请求矩阵项的用户输入,printMatrix()函数必须打印矩阵.

但打印任务不起作用(我无法访问创建的数组,我不明白为什么)

我收到错误:

matrix.cpp:35:20: error: invalid types ‘int[int]’ for array subscript
    cout << matrix[i][j];
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码是:

#include "iostream"
using namespace std;

// user input matrix
int createMatrix(int m, int n){
    int arr[m][n];
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << "A[" << i << "][" << j << "] : ";
            cin >> arr[i][j];
        }
        cout << endl;
    }
    return arr[m][n];
}

/*
void printMatrix(int matrix[][2], int m, int n){
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << matrix[i][j];
        }
    }
}
*/

int main(){ 
    int m = 2, n = 2; // m = rows, n = columns
    int matrix = createMatrix(m,n);

    //  printMatrix(matrix, m, n); // not working as sub-routine too, main target to make it work with sub-routine

    // to print matrix
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << matrix[i][j];
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 5

matrixint不是int[][].因为它是一个int没有下标操作符,这就是你得到错误的原因.您还使用了不是标准C++的可验证长度数组.我建议你改变你的代码使用std::vector类似的

std::vector<std::vector<int>> createMatrix(int m, int n)
{
    std::vector<std::vector<int>> arr(m, std::vector<int>(n));
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << "A[" << i << "][" << j << "] : ";
            cin >> arr[i][j];
        }
        cout << endl;
    }
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

然后main()是:

int main(){ 
    int m = 2, n = 2; // m = rows, n = columns
    std::vector<std::vector<int>> matrix = createMatrix(m,n);

    //  printMatrix(matrix, m, n); // not working as sub-routine too, main target to make it work with sub-routine

    // to print matrix
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << matrix[i][j];
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @Michail什么?使用矢量可能会添加几个整数vs一个数组,但矢量管理内存为你,速度和恕我直言,更容易传递和操纵比裸阵列. (2认同)
  • @Michail是的,懒惰对于程序员来说是一个非常好的特性.如果你想要它的复杂性,请在C中编程. (2认同)