我正在尝试以指针指针的形式构建一个2D数组.这不起作用:
bool** data = { new bool[4] {true,true,true},new bool[4] {true,false,true} };
可能吗?我应该怎么做?
编辑:
看起来我可能试图做错事.我有一个函数,它将一个未知大小的bool的2D数组以及整数宽度和高度作为参数.目前,签名是:
foo(bool** data,int width,int height)
解决方法
你可以有一个数组数组(有时称为多维数组):
bool data[][4] = { {true,{true,true} };
但是,这不能转换为bool **,因此如果您需要转换,那么这将无效.
或者,指向静态数组的指针数组(可转换为bool **):
bool data0 = {true,true}; bool data1 = {true,true}; bool data2 = {true,true}; bool data3 = {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),make_array(true,true) };
或者,也许你可以坚持使用数组,并修改你的函数来引用数组而不是指针,如果你需要支持不同的维度,可以将维度推断为模板参数.只有在编译时始终知道维度时,才可以执行此操作.
template <size_t N,size_t M> void do_something(bool (&array)[N][M]); do_something(data);