我有一個指針TS數組:如何聲明指向數組的指針?
T (*anArray)[]; // A pointer to an array of Ts.
如何聲明指針的指針TS的陣列? (即指向上方。)
它是:
T (**anArray)[];
或
T *(*anArray)[];
或
T (*anArray)*[];
或別的東西完全?
謝謝,
阿爾夫
我有一個指針TS數組:如何聲明指向數組的指針?
T (*anArray)[]; // A pointer to an array of Ts.
如何聲明指針的指針TS的陣列? (即指向上方。)
它是:
T (**anArray)[];
或
T *(*anArray)[];
或
T (*anArray)*[];
或別的東西完全?
謝謝,
阿爾夫
第一個 - T(**anArray)[];
你需要括號,否則它是一個指向指針的指針數組,參見[cdecl](http://cdecl.ridiculousfish.com/?q=int+%2A%2AanArray%5B5%5D)。一點點的背景和「爲什麼」的解釋會很好:) – knittl
T *(*anArray)[];
- >anArray
是指針至T的指針數組
T (**anArray)[];
- >anArray
被指針指向的數組T
最後一種形式是無效的語法和不編譯 – knittl
@ knittl你是對的*笑容* – 2011-08-26 17:41:59
打開cdecl.org然後複製粘貼下面的文本框:
declare a as pointer to pointer to array 10 of int
在粘貼,它會告訴你這是什麼意思在C++中。那麼它是這樣的:
int (**a)[10]
我敢肯定這是你在找什麼?玩更多的鏈接。您將學習更多的語法,以及如何用文字說出。
確定如何進行不尋常的指針組合的好方法如下:從變量名開始,向右看,不要越過圓括號,向左看,重複。說出你看到的順序,你看到它。
對於指針的指針數組,我們有
int (**a)[5]
開始用。我們看起來很正確,但是那裏有一個paren,所以向左看。好的,我們看到"*"
,所以它是一個指針。現在我們再次看起來很正常......仍然是一位不起眼的人,所以回到了左邊。另一個"*"
,所以它是一個指針指針。看起來不錯,paren,向左看,paren,所以現在我們可以跳出括號。現在我們看到括號,所以我們有一個指向數組的指針。最後,看一路左側,我們看到int
。指向指向數組int
s的指針。
的回答你的問題是,括號外的額外的指針被應用到陣列中包含的類型,而括號內它們應用到變量本身的類型:
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
http://cdecl.org/?q=declare+anArray+as+pointer+to+pointer+to+array+5+of+ int – Cubbi
你測試過他們中的任何一個嗎? –
有沒有這樣一個指向未知邊界數組的指針? – fredoverflow