Foo* (*)[8]?
我试图将它视为三重*,如此:
Foo*** = new Foo* [6][8];
但是我得到了不匹配的类型,所以我想只输入实际类型但不确定符号应该是什么?它是一个固定的6x8指针矩阵。
答案 0 :(得分:3)
你在问题的第一行有答案
using Foo2D = Foo*(*)[8];
Foo2D ptr = new Foo* [6][8];
或者,如果您想使用typedef
typedef Foo*(*Foo2D)[8];
但是,不要使用其中任何一种。如果在编译时已知大小,请使用vector<vector<unique_ptr<Foo>>>
或array<array<unique_ptr<Foo>, 8>, 6>
。
如果使用Boost是一个选项,那么有Boost.MultiArray库用于处理多维矩阵。
答案 1 :(得分:2)
Foo *mat[6][8];
如果它是指针矩阵(而不是指向矩阵的指针),请不要new
矩阵。相反,您需要new
的{{1}}个实例。
Foo
不要忘记删除所有for(int j = 0; j < 8; ++j)
for(int i = 0; i < 6; ++i)
mat[i][j] = new Foo;
。更好的是,使用C ++ 11的真棒Foo
和嵌套的std::unique_ptr
。
编辑,您似乎也想要一个动态分配的矩阵。这是指向这种矩阵的指针的类型:
std::array
答案 2 :(得分:0)
你可以这样打破它:
typedef Foo *FooPtr;
typedef FooPtr FooPtrMatrix[6][8];
FooPtrMatrix *foo = new FooPtrMatrix;