在主函数

时间:2015-05-21 14:30:25

标签: c++ arrays

我有一个数组int matrix[10][10]以及其他具有相似大小的数组,它们在原型函数和main函数之前声明。所有功能都使用这个2d数组。但是,我需要我的程序有一个函数,询问用户他想要的矩阵的大小。所以,它必须是这样的:int matrix[ROWS][COLUMNS]。我确定无法将数组声明为main函数,因为所有其他函数都使用此数组。我如何声明这种数组?

1 个答案:

答案 0 :(得分:2)

首先,不可能声明array with variable sizes,因为它们在C ++中不合法(尽管它们在C中是合法的)。所以你在这里运气不好。 其次,您需要main之前的声明。因此,你必须使用

  1. 动态数组,全局定义为int** matrix;,并在main()中初始化为

    matrix = new int*[ROWS];
    for(size_t i = 0 ; i < ROWS; ++i)
        matrix[i] = new int[COLS];
    

    那么你必须在一天结束时释放它的记忆

    for(size_t i = 0; i < ROWS; ++i)
        delete[] matrix[i];
    delete[] matrix;
    
    1. std::vector<>

      这样的标准容器
      std::vector<int> matrix; // defined globally
      
    2. 并在main()为其保留内存,例如

      matrix.reserve(ROWS*COLUMNS); // reserve memory for M rows
      

      然后你需要使用索引,这样你就可以从索引对映射到1D索引,即“逻辑”元素[i][j]i * COLS + j中的索引matrix表示。 {1}}。

      当然,您可以使用std::vector<std::vector<int>>,但这种方法更快,因为内存保证是连续的(同样适用于第一个示例,您可以使用int*代替)。