我有一个指向Ts:
数组的指针T (*anArray)[]; // A pointer to an array of Ts.
如何声明指向Ts数组的指针? (即指向上面的指针。)
是吗:
T (**anArray)[];
或
T *(*anArray)[];
或
T (*anArray)*[];
或其他完全不同的东西?
谢谢,
阿尔夫
答案 0 :(得分:3)
第一个 - T(**anArray)[];
答案 1 :(得分:1)
T *(*anArray)[];
- > anArray
是指向T指针数组的指针
T (**anArray)[];
- > anArray
是指向T
答案 2 :(得分:1)
你的问题的答案是括号外的额外指针应用于数组中包含的类型,而在括号内它们应用于变量本身的类型:
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
但最好的建议是避免这个问题并使用typedef:
typedef int array_t[10];
array_t **variable; // pointer to pointer to array of 10 integers
答案 3 :(得分:0)
打开cdecl.org,然后将以下内容复制粘贴到文本框中:
declare a as pointer to pointer to array 10 of int
在粘贴时,它告诉你它在C ++中意味着什么。好吧就是这样:
int (**a)[10]
我确定你正在寻找的是什么?更多地使用链接。您将学习更多语法,以及如何用文字表达。
答案 4 :(得分:0)
一个很好的方法来弄清楚如何制作这样的指针的异常组合如下:从变量名开始,向右看,不要越过括号,向左看,重复。按照您看到的顺序说出您所看到的内容。
对于指向数组指针的指针,我们有
int (**a)[5]
从一个开始。我们看起来正确,但那里有一个paren,所以向左看。好的,我们看到"*"
,所以它是一个指针。现在我们再次向右看...仍然是一个paren,所以回到左边。另一个"*"
,所以它是指向指针的指针。看吧,帕伦,向左看,帕伦,所以现在我们可以跳出括号。现在我们看到括号,所以我们有一个指向数组的指针。最后,一直向左看,我们看到int
。指向指向int
s。