2009-11-10 38 views

回答

3

不,你必須使用fooArray[0].foo

fooArray是碰巧指向數組的第一個元素的指針。使用[]將取消引用給定元素上的指針,因此一旦應用它就不再是指針,並且由於該運算符既解除引用又訪問結構成員,因此無法應用->運算符。

+0

我已經被告知說數組類型是「恰好指向數組的第一個元素的指針」,儘管我假設它的行爲就像帶有 - >運算符的指針,這樣就可以執行' fooArray-> foo'? – 2013-10-21 18:58:28

0

不是你的情況,因爲你是在使用

fooArray[0] 

,編譯器將讓你知道這個問題訪問結構(而不​​是指向一個struct)。

0

不,你不能。必須是一個指針。例如。這是確定的語法,明智的(但它會出現段錯誤,除非fooArray分配):

int main() 
{ 
struct { 
char *foo; 
}* fooArray[10]; 

fooArray[0]->foo = "hallo"; 
} 
+2

但是,指向數組的內存分配在哪裏? – Xinus 2009-11-10 09:07:45

+0

它沒有被分配。我只是在演示語法。它在帖子中這樣說。 – 2009-11-10 09:43:21

1

可以使用數組運算符(用於訪問數據成員)只在指針,fooArray [0]是不爲結構的指針,如果你想使用它你把它地址,並使用它像

(&fooArray[0])->foo="hello"; 

或者聲明指針/指針數組struct和分配內存以它..like

fooArray* a=new fooArray(); 
a->foo="hello"; 
3

記住的fooArray本身的值是一個指針。您可以取消引用指針,添加到它,...

fooArray->foo; /* same as fooArray[0].foo */ 
(fooArray+3)->foo; /* same as fooArray[3].foo */ 
1

只記得a->b(*a).b的簡寫。牢記這一點應該可以幫助你解決任何情況。即,在你的情況下,fooArray[0]->foo意味着(*fooarray[0]).foo,但fooarray[0]不是一個指針(它是一個結構體),所以你不能解引用它。因此它不會工作。