2011-08-26 87 views
2

我有一個指針TS數組:如何聲明指向數組的指針?

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

如何聲明指針的指針TS的陣列? (即指向上方。)

它是:

T (**anArray)[]; 

T *(*anArray)[]; 

T (*anArray)*[]; 

或別的東西完全?

謝謝,

阿爾夫

+4

http://cdecl.org/?q=declare+anArray+as+pointer+to+pointer+to+array+5+of+ int – Cubbi

+2

你測試過他們中的任何一個嗎? –

+1

有沒有這樣一個指向未知邊界數組的指針? – fredoverflow

回答

3

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

+0

你需要括號,否則它是一個指向指針的指針數組,參見[cdecl](http://cdecl.ridiculousfish.com/?q=int+%2A%2AanArray%5B5%5D)。一點點的背景和「爲什麼」的解釋會很好:) – knittl

1

T *(*anArray)[]; - >anArray是指針至T的指針數組

T (**anArray)[]; - >anArray被指針指向的數組T

+0

最後一種形式是無效的語法和不編譯 – knittl

+0

@ knittl你是對的*笑容* – 2011-08-26 17:41:59

0

打開cdecl.org然後複製粘貼下面的文本框:

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

在粘貼,它會告訴你這是什麼意思在C++中。那麼它是這樣的:

  • int (**a)[10]

我敢肯定這是你在找什麼?玩更多的鏈接。您將學習更多的語法,以及如何用文字說出。

0

確定如何進行不尋常的指針組合的好方法如下:從變量名開始,向右看,不要越過圓括號,向左看,重複。說出你看到的順序,你看到它。

對於指針的指針數組,我們有

int (**a)[5] 

開始用。我們看起來很正確,但是那裏有一個paren,所以向左看。好的,我們看到"*",所以它是一個指針。現在我們再次看起來很正常......仍然是一位不起眼的人,所以回到了左邊。另一個"*",所以它是一個指針指針。看起來不錯,paren,向左看,paren,所以現在我們可以跳出括號。現在我們看到括號,所以我們有一個指向數組的指針。最後,看一路左側,我們看到int。指向指向數組int s的指針。

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