出于某种原因,这给我带来了比我想象的更多麻烦......
int *myArray[3];
myArray = new int[mySize];
不起作用......
之前我以类似的方式使用过typedef并且它工作得很好,但这次我不想创建typedef
答案 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
,这样您至少可以获得第一类类型的行为。