我在想:
int i,z[3];
int q[i][z[3]];
此声明正确吗?
如果没有,则表明我可以存储i
行,每行中包含3个整数。
答案 0 :(得分:1)
C支持可变长度数组,其中数组大小在运行时确定。
您为q
定义的定义是有效的,第一维的大小为i
,第二维的大小为z[3]
。但是,由于z
是一个大小为3的数组,其有效索引为0-2,因此表达式z[3]
读入数组的末尾并调用undefined behavior。
如果您希望第二维的尺寸为3,只需指定尺寸即可。
int q[i][3];
答案 1 :(得分:0)
@dbush在他的回答中提到了可变长度数组(VLA)
此答案将提供另一种选择。
您可以使用std::vector
来实现:
std::vector<std::vector<int>> vec2d; // 2D vector
int row = 2; // row is variable
for (int i = 0; i < row; i++) {
vec2d.push_back(std::vector<int>(3)); // each row has 3 columns
}
// just for checking the size
for (auto const& v: vec2d) {
std::cout << v.size() << " "; // 3 3
// ^ ^ each row has 3 columns
}