2010-04-01 6 views
2

J'ai une structure qui contient des noms et des âges. J'ai fait une liste chaînée de ces structures, en utilisant cela comme un pointeur:Accéder à la structure à l'aide de pointeurs [c]

aNode *rootA; 

dans ma principale. Maintenant, j'envoyer Roota ** à une fonction comme si

addElement(5,"Drew",&rootA); 

Parce que je dois passer Roota par référence afin que je puisse le modifier dans d'autres fonctions (dans mon programme actuel j'ai deux racines, donc le retour ne sera pas travail)

Le problème est, dans mon programme, je ne peux pas dire accéder aux membres de la structure.

*rootA->age = 4; 

par exemple ne fonctionne pas.

J'espère que vous pourrez m'aider. Merci!

Répondre

6

Il est difficile de dire à partir de votre question, mais il semble que le type de rootA dans le dernier échantillon est aNode**. Si c'est le cas, la raison de l'échec est que -> a une priorité supérieure à *. Vous devez utiliser un paren pour corriger ce problème

(*rootA)->age = 4; 

Voir toute C Operator Precedence Table. Si le type de rootA est Ensuite, vous n'avez pas besoin de déréférencer en plus d'utiliser ->. Au lieu de cela il suffit d'utiliser -> directement

rootA->age = 4; 
+0

Wow, c'est parfait. Merci, je n'avais aucune idée que ça fonctionnait comme ça. En outre, obtenir une réponse en 36 secondes c'est tout à fait raison. Je dois attendre 11min pour le sélectionner comme la bonne réponse, lol! – Blackbinary

+0

+1 pour une réponse très complète –

+0

Les erreurs de préséance sont des fautes courantes dans la programmation d'aujourd'hui. – Robert

0

Je suppose que vous devez passer un pointeur vers la variable rootA, et non déréférencer deux fois.

addElement(5,"Drew",&rootA); 
+0

mes capacités de copie sont à blâmer, corrigées dans la question. – Blackbinary

Questions connexes