【问题标题】:C++ question defining an array outside of main()在 main() 之外定义数组的 C++ 问题
【发布时间】:2021-06-05 15:19:46
【问题描述】:

当我在两个不同的地方定义数组(具有相同的行)时,我找不到以下代码无法工作的原因。这是否是好的做法不是我的问题。我只是想找出原因。


// Array Test: t.cpp
// If only the ONE LINE in question is enabled in either place
// it works/fails as indicated. I wonder why?

#include "iostream"

int a = 5; // Rows
int b = 4; // Columns

// int x[a][b]; // if done here: NoGo! WHY? <<<***************************

int main () {

int x[a][b]; // if done here: OK!           <<<***************************

for (int r = 0; r < a; r++) {
    for (int c = 0; c < b; c++) {
        x[r][c] = (r*10+10) + (c+1);
        std::cout << x[r][c] << " ";
    }
    std::cout << "\n";
  }
std::cout << "\nARRAY CREATED \n\n";
}

【问题讨论】:

  • 数组的大小必须是编译时常量。 ab 都不是编译时常量。该行标有“如果在此处完成:OK!”不是合法的 C++。一些编译器允许它作为扩展。
  • 如果将constexpr 添加到两个变量声明中,如果在文件范围内声明数组,它也应该可以工作。
  • @AndreasWenzel -- const 就足够了。

标签: c++ arrays global definition


【解决方案1】:

如果您全局定义数组,则需要在编译时知道其大小。在函数中,数组将在堆栈上创建,因此它的大小可能是可变的(但请参阅下面的备注)。您的变量ab 不是常量,因此它们的值在编译时是未知的。

通过将它们声明为常量,它可以按您的预期工作:

const int a = 5; // Rows
const int b = 4; // Columns

int x[a][b];

备注:可变长度数组(即非常量大小说明符)是 C99 功能,不属于任何当前 C++ 标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多