初始化二维数组时出错[重复]

Posted

技术标签:

【中文标题】初始化二维数组时出错[重复]【英文标题】:Error while initializing a 2D Array [duplicate] 【发布时间】:2016-03-27 20:11:26 【问题描述】:

这是我将 2 个矩阵相乘的程序的一部分。

int m1, m2, n1, n2;
int first[m1][n1], second[m2][n2], result[m1][n2];
cout<<"Please enter no.of rows and columns of the 1st Matrix, respectively :";
cin>>m1>>n1;

我收到这些错误

error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2057: expected constant expression
error C2087: '<Unknown>' : missing subscript
error C2133: 'first' : unknown size

我在 Visual C++ 6.0(非常旧的版本)中键入此代码,因为这是目前在学校教给我们的内容。请帮助我摆脱这些错误。提前致谢。

【问题讨论】:

不知道是否允许用变量初始化数组大小...是m1m2n1n2在多维数组初始化之前定义的吗?您是否通过用实际数字替换变量来测试程序? 您在变量初始化之前使用它们 使用堆。做这样的事情: int **first = new int*[m]; for(int i = 0; i 【参考方案1】:

当你想像这样初始化一个数组时,你必须使用 const 值(这些值在编译时是已知的)。 例如:

const int r = 1, c = 2;
int m[r][c];

但是,在您的情况下,您在编译期间不知道大小。所以你必须创建一个动态数组。 这是一个示例 sn-p。

#include <iostream>

int main()

    int n_rows, n_cols;
    int **first;
    std::cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :";
    std::cin >> n_rows >> n_cols;

    // allocate memory
    first = new int*[n_rows]();
    for (int i = 0; i < n_rows; ++i)
        first[i] = new int[n_cols]();

    // don't forget to free your memory!
    for (int i = 0; i < n_rows; ++i)
        delete[] first[i];
    delete[] first;

    return 0;

【讨论】:

【参考方案2】:

在使用这些变量初始化某些数组之前,您必须为这些变量(m1、m2、n1、n2)分配一些数字。当你不给它们一些值时,最初它们是 0。显然,你不能创建一个大小为 0 的数组,这是合乎逻辑的。数组的大小是恒定的,大小为 0 的数组是没有意义的。

也许你需要尝试这样的事情:

int m1, m2, n1, n2;

cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :";
cin >> m1 >> n1;

cout << "Please enter no.of rows and columns of the 2st Matrix, respectively :";
cin >> m2 >> n2;

int first[m1][n1], second[m2][n2], result[m1][n2];

【讨论】:

以上是关于初始化二维数组时出错[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将二维字符串数组传递给函数时出错 (C++)

访问二维数组中的元素时出错

使用浮点数遍历二维数组时出错

使用 c# 访问二维数组时出错

二维数组初始化的差异[重复]

Java - 在构造函数中初始化数组[重复]