在 main() 之外定义数组的 C++ 问题

问题描述

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


// 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 不是常量,因此它们的值在编译时未知。

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

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

int x[a][b];

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...