为什么新的(*)[2]被禁止?

时间:2016-09-15 08:07:35

标签: c++

当我编辑流动代码时:

int (*p)[2] = new int [2][2];  //it's right.
int (*q)[2] = new int (*)[2];  //it's wrong.
//the wrong message:error: expected primary-expression before ')' token.
//compile by g++ in Code::Blocks,Debug.

我能理解第一个。 但是,为什么第二个人能够工作呢?

编译器如何匹配该类型? 显然,它不像一般条件那样匹配,并且必须有一些新的限制。我想我忽略了一些原则。

1 个答案:

答案 0 :(得分:4)

我在这里解决了这个问题:我尝试过的第一件事,但我没有深入了解它的工作原理。您只需添加括号:

int (**q)[2] = new (int (*)[2]);

另请注意,new T会返回T*,因此new指针会返回指向指针的指针。