您拥有的数组声明不是您想要的。您有一个指向 int 指针的两元素指针数组。这个页面是阅读这些声明的好指南。
就个人而言,我更喜欢使用 typedef 并从头开始构建这样的复杂类型:
typedef int[2] element_type; // this is the 2-element array of ints
typedef element_type* inner_type; // this is the array of unknown size
typedef inner_type[5] outer_type; // this is the actual type we want to use
outer_type output_vertex; // we now have an array of 5 inner_type variables on the stack
// The output_vertex is *uninitialized* so we have to initialize each of its elements
for (int i=0; i < 5; ++i) {
output_vertex[i] = new inner_type[SOME_SIZE];
}
// do stuff with output_vertex now that it's initialized
// then, to prevent memory leaks, delete the memory you allocated
for (int i=0; i < 5; ++i) {
delete[] output_vertex[i];
}
可能有一些方法可以简化,但这应该是一个开始。
如果您希望它inner_type
是可附加的,我强烈建议您使用std::vector
而不是原始数组。原始数组需要做很多簿记工作,所以我不会举一个例子;但是,这或多或少是您将要做的事情std::vector
:
typedef std::pair<int,int> element_type; // this is the 2-element array of ints as a pair
typedef std::vector<element_type> inner_type; // dynamic vector this time
inner_type output_vertex[5]; // we now have an array of 5 inner_type variables on the stack
// do stuff with output_vertex
std::vector
与动态分配的数组一样快,但您不必自己做任何簿记。您还具有不需要管理尽可能多的堆分配对象的好处。
请注意,原始数组与容器(例如 )不兼容std::vector
,所以我std::pair
在这里改用。
如果您能够使用 C++11(或 boost),并且需要一个包含两个以上项目的固定大小数组,可以放入标准容器中,请使用std::array
.