2009-11-10 6 views

Répondre

3

Non, vous devez utiliser fooArray[0].foo.

fooArray est un pointeur qui se produit pour pointer vers le premier élément d'un tableau. L'utilisation du [] déréférencé ce pointeur sur l'élément donné ainsi une fois appliqué il n'est plus un pointeur et l'opérateur -> ne peut pas être appliqué car cet opérateur déréférencement et accès à un membre struct.

+0

On m'a dit que le type d'un tableau est "un pointeur qui pointe vers le premier élément d'un tableau", bien que je suppose qu'il agit comme un pointeur avec l'opérateur -> tel que vous pouvez le faire ' fooArray-> foo'? –

0

pas dans votre cas parce que vous accédez à un struct (pas un pointeur vers une struct) lorsque vous utilisez

fooArray[0] 

Le compilateur vous informer sur ce problème.

0

Non, vous ne pouvez pas. Doit être un pointeur. Par exemple. c'est OK sage syntaxe (mais il segfault à moins fooArray est attribué):

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

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

mais où est l'allocation de mémoire au tableau de pointeurs? – Xinus

+0

Ce n'est pas affecté. Je ne fais que démontrer la syntaxe. Il le dit dans le post. –

1

vous pouvez utiliser l'opérateur de tableau (pour accéder à des membres de données) uniquement sur des pointeurs, fooArray [0] n'est pas un pointeur sur struct, si vous voulez l'utiliser, vous prenez l'adresse de celui-ci et l'utiliser comme

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

Ou déclarer un pointeur/tableau de pointeurs sur struct et allouer de la mémoire à elle ..like

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

Rappelez-vous la valeur de fooArray par lui-même est un pointeur. Vous pouvez déréférencer le pointeur, ajouter, ...

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

Rappelez-vous simplement que a->b est un raccourci pour (*a).b. Garder cela à l'esprit devrait vous aider à résoudre n'importe quelle situation. I.e, dans votre cas fooArray[0]->foo signifie (*fooarray[0]).foo, mais fooarray[0] n'est pas un pointeur (c'est une struct), donc vous ne pouvez pas le déréférencer. Par conséquent, cela ne fonctionnera pas.