Вы можете иметь массив массивов (иногда их называют многомерным массивом):
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);