在C ++中创建一个动态大小的固定大小的int数组

时间:2011-12-16 03:15:49

标签: c++ arrays memory fixed

出于某种原因,这给我带来了比我想象的更多麻烦......

int *myArray[3];

myArray = new int[mySize];

不起作用......

之前我以类似的方式使用过typedef并且它工作得很好,但这次我不想创建typedef

3 个答案:

答案 0 :(得分:6)

int (*myArray)[3] = new int[mySize][3];

答案 1 :(得分:6)

有人可能会这样做:

::std::vector<int[3]> myArray;

因为vector非常适合动态大小的数组。不幸的是,虽然该声明有效,但结果vector无法使用。

如果您拥有::std::array(C ++ 11功能)并且它实际上可以正常工作,这将同样有效:

::std::vector< ::std::array<int, 3> > myArray;

如果你能做到这一点,我强烈推荐它。处理vector比使用new分配自己的数组更好,更安全。

否则,试试这个:

typedef int inner_array_t[3];
inner_array_t *myArray = new inner_array_t[mySize];

由于你不想出于某种奇怪的原因使用typedef,你可以像这样解开它:

int (*myArray)[3] = new int[mySize][3];

答案 2 :(得分:3)

int *myArray[3];

这意味着“myArray应该是一个由三个指针组成的数组”。

你可能想要“myArray应该指向(三个整数的数组)”。拼写为int (*myArray)[3]

使用typedef会更容易。

typedef int datum[3];
datum* myArray = new datum[mySize]; // no fuss, no muss.

但严重的是,只需使用std::vector即可。并为您的三个整数组创建一个实际的结构。或者,如果它确实应该像数组一样,请使用boost::array,这样您至少可以获得第一类类型的行为。