您可以使用類型爲struct的數組使用箭頭運算符嗎?例如:- >帶數組的箭頭運算符?
struct {
char *foo;
} fooArray[10];
fooArray[0]->foo = ...
您可以使用類型爲struct的數組使用箭頭運算符嗎?例如:- >帶數組的箭頭運算符?
struct {
char *foo;
} fooArray[10];
fooArray[0]->foo = ...
不,你必須使用fooArray[0].foo
。
fooArray
是碰巧指向數組的第一個元素的指針。使用[]
將取消引用給定元素上的指針,因此一旦應用它就不再是指針,並且由於該運算符既解除引用又訪問結構成員,因此無法應用->
運算符。
不是你的情況,因爲你是在使用
fooArray[0]
,編譯器將讓你知道這個問題訪問結構(而不是指向一個struct)。
不,你不能。必須是一個指針。例如。這是確定的語法,明智的(但它會出現段錯誤,除非fooArray分配):
int main()
{
struct {
char *foo;
}* fooArray[10];
fooArray[0]->foo = "hallo";
}
但是,指向數組的內存分配在哪裏? – Xinus 2009-11-10 09:07:45
它沒有被分配。我只是在演示語法。它在帖子中這樣說。 – 2009-11-10 09:43:21
可以使用數組運算符(用於訪問數據成員)只在指針,fooArray [0]是不爲結構的指針,如果你想使用它你把它地址,並使用它像
(&fooArray[0])->foo="hello";
或者聲明指針/指針數組struct和分配內存以它..like
fooArray* a=new fooArray();
a->foo="hello";
記住的fooArray
本身的值是一個指針。您可以取消引用指針,添加到它,...
fooArray->foo; /* same as fooArray[0].foo */
(fooArray+3)->foo; /* same as fooArray[3].foo */
只記得a->b
是(*a).b
的簡寫。牢記這一點應該可以幫助你解決任何情況。即,在你的情況下,fooArray[0]->foo
意味着(*fooarray[0]).foo
,但fooarray[0]
不是一個指針(它是一個結構體),所以你不能解引用它。因此它不會工作。
我已經被告知說數組類型是「恰好指向數組的第一個元素的指針」,儘管我假設它的行爲就像帶有 - >運算符的指針,這樣就可以執行' fooArray-> foo'? – 2013-10-21 18:58:28