Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1351 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Pointeur sur structure

 


aucun




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pointeur sur structure

n°1234290
JusteMoiDe​Retour
Posté le 29-10-2005 à 22:23:51  profilanswer
 

Bonjour a tous !
 
Voila, je debute en C depuis septembre. On a vu il y a qqs jours les structures...  
J'ai donc essaye d'ecrire une version (simplifiee) d'un arbre binaire(trie) sous forme de liste chainee
Voici la structure :
 
struct uneStruct {
 int element;
 struct uneStruct * arbreL;
 struct uneStruct * arbreR;
} arbreBinaire;
 
J'ai une methode void inserer (struct uneStruct * arbre, int elt)
 
Dans cette methode, je veux acceder a element et au deux autres arbres mais je n'y arrive pas.  
Pour y acceder, j'ecris        arbreBinaire->element  
mais je me rend compte que je manipule les adresses et non le contenu des variables.
Comment puis je resoudre ce probleme?

mood
Publicité
Posté le 29-10-2005 à 22:23:51  profilanswer
 

n°1234291
jesus_chri​st
votre nouveau dieu
Posté le 29-10-2005 à 22:29:51  profilanswer
 

Code :
  1. typedef struct uneStruct {
  2. int element;
  3. struct uneStruct* arbreL;
  4. struct uneStruct* arbreR;
  5. } uneStruct;
  6. uneStruct arbreBinaire;
  7. void inserer(uneStruct* arbre, int elt)
  8. {
  9.    arbre->element = 42; /* acces à l'element */
  10.    arbre->arbreL = ... ; /* acces à l'arbre gauche */
  11.    arbre->arbreR = ... ; /* acces à l'arbre droit */
  12. }


A propos du typedef : en C on évite de se trainer des struct partout alors on utilise typedef. En C++ ce mécanisme est devenu automatique.

n°1234292
Taz
bisounours-codeur
Posté le 29-10-2005 à 22:42:33  profilanswer
 

ton affirmation sur le typedef est gratuite. Certains préfèrent n'utiliser typedef que pour des types opaques ou des types intégrés et veulent conserver le 'struct' pour ne rien cacher de la nature de la variable. Linux suit cette ligne.

n°1234294
jesus_chri​st
votre nouveau dieu
Posté le 29-10-2005 à 22:52:27  profilanswer
 

ouais quand je dit "on evite", on c'est pas tout le monde. Mais sauf à le vouloir explicitement, il me semble que c'est mieux. Comme il débute, j'ai pensé qu'il utilisait struct uneStruct parce qu'il ne connaissait pas typedef.
Ou parce que son prof est un puriste :D
maintenant avec les éditeur modernes t'as plus besoin de tracer la nature des types, tu peux le demander à ton IDE. C'est comme la notation hongroise autrefois chère à microsoft avec i devant les int, sz devant les chaines... C'est lourd, dépassé et inutile maintenant.
Maintenant ceux qui codent avec VI bon ben ils assument :sarcastic:

n°1234296
Taz
bisounours-codeur
Posté le 29-10-2005 à 22:57:26  profilanswer
 

moi j'ai jamais trop compris cette parano du typedef. Je me souviens surtout des embrouilles quand j'ai appris le C : c'était toujours le bordel savoir où mettre le typedef, etc

n°1234381
jesus_chri​st
votre nouveau dieu
Posté le 30-10-2005 à 10:59:19  profilanswer
 

un exemple classqiue :

Code :
  1. typedef double[2] point;


point est un tableau de 2 double... faux ! la bonne syntaxe est contre-intuitive :

Code :
  1. typedef double point[2];

n°1234517
JusteMoiDe​Retour
Posté le 30-10-2005 à 16:40:32  profilanswer
 

Merci pour vos reponses mais j'ai toujours un probleme... bon je vous montre le code, ca sera plus simple.

Code :
  1. void inserer (struct uneStruct * arbre, int elt) {
  2. // printf("arbre->element : %d", arbre->element); Debugage
  3. if (arbre->element == 0)
  4. { arbre->element = elt;
  5.  return;
  6. }
  7. if (arbre->element < elt)
  8. {
  9.  if (arbre->arbreR != NULL)
  10.  { inserer(arbre->arbreR, elt);
  11.   return;
  12.  }
  13. arbre->arbreR = (struct uneStruct *)malloc(sizeof(struct uneStruct));
  14. inserer(arbre->arbreR, elt);
  15. return;
  16. }
  17. else
  18. {
  19.  if (arbre->arbreL != NULL)
  20.  { inserer(arbre->arbreL, elt);
  21.   return;
  22.  }
  23. arbre->arbreL = (struct uneStruct *)malloc(sizeof(struct uneStruct));
  24. inserer(arbre->arbreL, elt);
  25. return;
  26. }
  27. }


Voila ...
En fait, quand j'imprime arbre->element  eh ben ce n'est pas 2 (par exemple), c'est l'adresse de l'entier.
 
A propos du typedef, on l'a vu mais on ne l'utilise pas (pour le moment). On nous l'a conseille surtout pour les declarations de types complexes.  
Pour le moment je teste les struct et apres je continuerai avec les unions et les enumeres.

n°1234565
leneuf22
Posté le 30-10-2005 à 18:56:37  profilanswer
 

JusteMoiDeRetour a écrit :

En fait, quand j'imprime arbre->element  eh ben ce n'est pas 2 (par exemple), c'est l'adresse de l'entier.


 
Pourquoi dis-tu ça ?
Si ça t'affiche une valeur à coucher dehors, c'est peut-être qu'il te manque une initialisation quelque part...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Pointeur sur structure

 

Sujets relatifs
cast vers un pointeur sur tableauEffacer un répertoire avec la structure Public Type SHFILEOPSTRUCT
Structure serveur multi-clientPassage de pointeur de structure
[VC++] Affecter 1 adresse connue au pointeur d'1 structureProblème avec pointeur dans une structure
pointeur et structuremanipuler un pointeur de structure ( question de noob dsl )
[C] probleme structure et pointeur[C] Ca prend combien de place un pointeur sur fichier? sur structure?
Plus de sujets relatifs à : Pointeur sur structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR