如何声明指向数组指针的指针?

How do I declare a pointer to a pointer to an array?

本文关键字:指针 数组 何声明 声明      更新时间:2023-10-16

我有一个指向t数组的指针:

T (*anArray)[]; // A pointer to an array of Ts.

如何声明一个指向t数组指针的指针?(即。指向上面的指针)

:

T (**anArray)[];

T *(*anArray)[];

T (*anArray)*[];

还是其他完全不同的东西?

谢谢,阿尔法

第一个- T(**anArray)[];

你的问题的答案是,括号外的额外指针应用于数组中包含的类型,而在括号内,它们应用于变量本身的类型:

int (*array)[10];  // pointer to array of 10 int
int *(*array)[10]; // pointer to array of 10 pointer to int
int (**array)[10]; // pointer to pointer to array of 10 int
但是最好的建议是避免这个问题,使用typedefs:
typedef int array_t[10];
array_t **variable;      // pointer to pointer to array of 10 integers

T *(*anArray)[]; -> anArray是指向T指针数组的指针

T (**anArray)[]; -> anArray是指向数组T的指针

打开cdecl.org,然后将以下内容复制粘贴到文本框中:

  • declare a as pointer to pointer to array 10 of int

在粘贴时,它会告诉你它在c++中的含义。它是:

  • int (**a)[10]

我肯定这就是你想要的?多玩一下这个链接。你会学到更多的语法,以及如何用单词来表达。

弄清楚如何做出像这样不寻常的指针组合的好方法如下:从变量名开始,向右看而不越过括号,向左看,重复。按照你看到的先后顺序说出你看到的。

对于指向数组指针的指针,我们有

int (**a)[5]

从a开始。我们向右看,但是那里有父元素,所以向左看。我们看到"*",它是一个指针。现在我们再次向右看……仍然是父母,所以回到左边。另一个"*",所以它是指向指针的指针。右看,父括号,左看,父括号,现在我们可以跳出括号了。现在我们看到括号,所以我们有一个指针指向指向数组的指针。最后,看所有的方式到左边,我们看到int。指向int数组的指针