您可以有一个数组的数组(有时称为多维数组):
bool data[][4] = {
{true, true, true, true},
{true, false, false, true},
{true, false, false, true},
{true, true, true, true}
};
然而,这不能转换为bool**
,所以如果您需要进行这种转换,则无法使用此方法。
或者,可以使用指向静态数组的指针数组(可以转换为bool**
):
bool data0 = {true, true, true, true};
bool data1 = {true, false, false, true};
bool data2 = {true, false, false, true};
bool data3 = {true, true, true, true};
bool * data[] = {data0, data1, data2, data3};
或者如果你真的想要动态数组(这几乎肯定是一个坏主意):
bool * make_array(bool a, bool b, bool c, bool d) {
bool * array = new bool[4];
array[0] = a;
array[1] = b;
array[2] = c;
array[3] = d;
return array;
}
bool * data[] = {
make_array(true, true, true, true),
make_array(true, false, false, true),
make_array(true, false, false, true),
make_array(true, true, true, true)
};
或者,也许你可以继续使用数组,并修改你的函数以取代指针引用数组,如果需要支持不同的维度,则通过模板参数推断维度。只有在编译时维度始终已知才可能实现这一点。
template <size_t N, size_t M>
void do_something(bool (&array)[N][M]);
do_something(data);
do_something<2,4>(twoByFourArray)
而不是do_something(twoByFourArray)
。 - Eric[x * y]
的数组,其中array[i, j] = array[i * y + j]
。 - Gustavo6046