【发布时间】:2021-01-12 02:13:13
【问题描述】:
#include <iostream>
using namespace std;
int main() {
int rows = 10;
int cols = 9;
int opt[rows][cols] = {0};
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
std::cout << opt[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
输出:
0 32767 1887606704 10943 232234400 32767 1874154647 10943 -1
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
我在https://www.codechef.com/ide中使用gcc 6.3
我希望第一行全为零。不应该是这样吗?
编辑:我用 const 变量对行和列进行了测试,然后将其初始化为全零。我觉得这应该引发编译错误,而不是表现出这种不正确(并且有潜在危险)的行为。
【问题讨论】:
-
这个
int opt[rows][cols]不是有效的 C++ - 数组大小必须是编译时常量,而不是变量。 -
C++ 不支持可变长度数组。如果您将
rows和columns更改为const,问题就解决了。 -
@dev_nut 请不要阅读 C 标签。这个问题与C无关...
-
我回滚了,因为有人在原始代码中将变量更改为 const,这使得整个问题变得毫无意义。不打算回滚标签。
-
有趣的是,在 wandbox 上进行测试,gcc 4.9.x 系列都产生了全零。上面没有和下面的所有内容都表示无法初始化数组。这可能是一个错误
标签: c++ gcc variable-length-array