C ++中<type * [n]>和<type(*)[n]>之间的区别</type(*)[n]> </type * [n]>

时间:2015-03-03 13:37:04

标签: c++ templates pointers

我想创建一个存储二维chars数组的队列,我认为以下列方式声明它会起作用:

queue<char*[7]> states;

但事实证明,正确的方法是:

queue<char(*)[7]> states;

我无法真正理解圆括号的变化是什么?我想它与优先级有关,但没有更具体的。

3 个答案:

答案 0 :(得分:3)

char*[7]是一个包含指向char的七个指针的数组,char(*)[7]是指向七个char的数组的指针。通常它用于分配动态连续的多维数组(参见here)。

C++ FAQ about arrays可能会让您对这些微妙之处有所了解。

答案 1 :(得分:3)

记住char*[7]含义的一种简单方法是,这是main的第二个参数的形式。

即。它意味着一个指针数组。

然后char(*)[7]最容易通过引入名称进行分析,例如char(*p)[7]。由于C声明旨在模仿已声明事物的使用,这意味着您可以取消引用p,并对结果编制索引,然后生成char。即p是指向char数组的指针。

答案 2 :(得分:2)

char*[7]是指向char的指针数组。 char(*)[7]是一个引用char数组的指针。