Pouvez-vous utiliser l'opérateur de flèche avec un tableau de type struct. Par exemple:-> Arrow opérateur avec des tableaux?
struct {
char *foo;
} fooArray[10];
fooArray[0]->foo = ...
Pouvez-vous utiliser l'opérateur de flèche avec un tableau de type struct. Par exemple:-> Arrow opérateur avec des tableaux?
struct {
char *foo;
} fooArray[10];
fooArray[0]->foo = ...
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.
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.
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";
}
mais où est l'allocation de mémoire au tableau de pointeurs? – Xinus
Ce n'est pas affecté. Je ne fais que démontrer la syntaxe. Il le dit dans le post. –
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";
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 */
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.
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'? –