accès au contenue d'une struct (*tata.toto)

accès au contenue d'une struct (*tata.toto) - C - Programmation

Marsh Posté le 10-06-2004 à 19:54:52    

Si j'ai une struct ville qui encapsule une struct rue de type Liste qui contient des pointeur et des info, comment je fait pour initialiser le contenu de rue avec une fonction  générique  Liste initListe()
 
Puis-je faire :

Code :
  1. *v.rue = initListe();


 
en tout ca ça me donne une erreur à l'exécution!

Reply

Marsh Posté le 10-06-2004 à 19:54:52   

Reply

Marsh Posté le 10-06-2004 à 19:58:19    

donne la définition de ta structure, le prototype de initList() et la déclaration de v
 
mais je parie que v.run pointe vers n'importe quoi, alors une petite * et pan !


Message édité par Taz le 10-06-2004 à 20:07:38
Reply

Marsh Posté le 10-06-2004 à 20:10:32    

Code :
  1. Liste  initListe(int *err) //prototype
  2. {
  3. Liste * ptrListe;
  4. ptrListe = (Liste *) malloc (sizeof (Liste));
  5. if (ptrListe == NULL)
  6. {
  7.  *err = LNI;
  8. }
  9. else
  10. {
  11.  *err = OK;
  12.  ptrListe->sommetGauche = NULL;
  13.  ptrListe->card = 0;
  14.  ptrListe->ptrcompare = NULL;
  15. }
  16. return *ptrListe;
  17. }
  18. //struct
  19. typedef struct
  20. {
  21. Liste * rue; //pointeur sur une rue
  22. char * ptrChar; //nom de la ville
  23. } TypeVille;
  24. typedef struct
  25. {
  26. TypeNoeud * sommetGauche; //pointeur sur le début de la liste
  27. int card;     //le nombre de noeud
  28. BOOL (* ptrcompare) (void *, void *, int *); //pointeur sur différentes fonctions
  29. } Liste;
  30. //La déclaration:
  31. TypeVille v;
  32. //l'appel:
  33. *v.rue = initListe (&err);


 
 

Reply

Marsh Posté le 10-06-2004 à 20:13:54    

Pourquoi tu mets une etoile a ton *v.rue?

Reply

Marsh Posté le 10-06-2004 à 20:20:29    

En faite je veux initialiser le contenue de la struct rue de type Liste, mais v.rue est seulement un pointeur. J'essaie de faire à la manière de  

Code :
  1. int * ptrMonInt;
  2. *ptrMonInt = 2;

Reply

Marsh Posté le 10-06-2004 à 20:31:09    

ben oui mais bo, tu vois bien que ton pointeur pointe vers rien.
 
pour parler de ton type Liste, essaie de pas trop te mélanger les pinceaux : ne manipule que des Liste* ou que des Liste selon ton choix. genre initListe() retourne une Liste*

Reply

Marsh Posté le 10-06-2004 à 20:47:37    

OK je voie, mais je ne peut pas changer le prototype qui doit me retourner une valeur de type Liste. Or dans mon main(), c'est vrai que v.rue pointe sur rien. Alors je dois lui trouver une adresse, donc je peux faire:

Code :
  1. v.rue = (Liste *) malloc (sizeof (Liste));
  2. //et par la suite faire :
  3. *v.rue = initListe (&err);


Mais voila, je ne peut pas passer ce pointeur en paramètre de initListe () car le prototype ne l'autorise pas. Donc initListe () ne saura pas sur quoi travailler?

Reply

Marsh Posté le 10-06-2004 à 21:01:32    

tu vois, tu mélanges les deux et vois ce que ça donne. ne manipule que des Liste ou des Liste*, ok
 
 
pourquoi tu ne peux pas ?
 
si tu ne peux pas, c'est pas grave
tu n'a pas besoin d'allouer dynamiquement Liste, seulement les maillons. donc tu peux manipuler les Liste comme des int, sans passage par pointeur, du moment que tu t'y retrouves

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed