当我编辑流动代码时:
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.
我能理解第一个。 但是,为什么第二个人能够工作呢?
编译器如何匹配该类型? 显然,它不像一般条件那样匹配,并且必须有一些新的限制。我想我忽略了一些原则。
答案 0 :(得分:4)
我在这里解决了这个问题:我尝试过的第一件事,但我没有深入了解它的工作原理。您只需添加括号:
int (**q)[2] = new (int (*)[2]);
另请注意,new
T
会返回T*
,因此new
指针会返回指向指针的指针。