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

  FORUM HardWare.fr
  Programmation
  C

  J'ai du mal avec les struct et les pointeurs ensemble !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

J'ai du mal avec les struct et les pointeurs ensemble !

n°899736
NounouRs
Non parce que c pas mon pied !
Posté le 16-11-2004 à 11:47:48  profilanswer
 

Lorsqu'on déclare une structure comme ca :
 

Code :
  1. typedef struct noeud
  2. { int orig_x;
  3.   int orig_y;
  4.   int fin_x;
  5.   int fin_y;
  6.   // ici pour ajouter des infos, int, etc...
  7.   char etat[7];
  8.   struct noeud *HG;
  9.   struct noeud *HD;
  10.   struct noeud *BG;
  11.   struct noeud *BD;
  12. } Type_noeud;
  13. typedef Type_noeud *Arbre;


 
Comment peut on s'en servir ??
 
par exemple, la fonction de création d'un élément de la structure est bien :
[cpp][ Arbre arbre = (Arbre) malloc(sizeof(Type_noeud));/cpp]
 
 

mood
Publicité
Posté le 16-11-2004 à 11:47:48  profilanswer
 

n°899746
couak
Posté le 16-11-2004 à 11:59:05  profilanswer
 

NounouRs a écrit :


Comment peut on s'en servir ??


Peux-tu être plus précis ?

n°899752
Sve@r
Posté le 16-11-2004 à 12:13:23  profilanswer
 

NounouRs a écrit :

Lorsqu'on déclare une structure comme ca :
 

Code :
  1. typedef struct noeud
  2. { int orig_x;
  3.   int orig_y;
  4.   int fin_x;
  5.   int fin_y;
  6.   // ici pour ajouter des infos, int, etc...
  7.   char etat[7];
  8.   struct noeud *HG;
  9.   struct noeud *HD;
  10.   struct noeud *BG;
  11.   struct noeud *BD;
  12. } Type_noeud;
  13. typedef Type_noeud *Arbre;


 
Comment peut on s'en servir ??
 
par exemple, la fonction de création d'un élément de la structure est bien :

Code :
  1. Arbre arbre = (Arbre) malloc(sizeof(Type_noeud));




 
Ce serait déjà une bonne idée de nommer tes types "t_qqchose". Comme cela, tu ne te mélangeras plus entre "type" et "variable".
Sinon, ton allocation est correcte. Ta variable "arbre" est un pointeur et a été allouée avec une taille suffisante pour stocker une structure "noeud".
 
Maintenant, si tu veux référencer un membre de "*arbre" (par exemple si tu veux remplir "orig_x" ), il te faut parler à
"(*arbre).orig_x". Mais comme cette écriture est fastidieuse, tu peux la remplacer par "arbre->orig_x". Par exemple

Code :
  1. arbre->orig_x=150;


 
Ensuite, si tu veux t'adresser à un membre qui est un pointeur, par exemple "NG", il faut parler à
"*arbre->NG". L'étoile devant le mot "arbre" s'adresse en fait à "NG" (confusion possible)
 
Pour résumer
- la flèche après une variable signifie que la variable est un pointeur sur une structure
- l'étoile devant un nom de variable de type "struct" signifie qu'on s'adresse à un membre qui est un pointeur


Message édité par Sve@r le 16-11-2004 à 12:15:38
n°899771
manatane
En vous remerciant, bonsoir
Posté le 16-11-2004 à 13:07:50  profilanswer
 

Citation :

Code :
  1. typedef Type_noeud *Arbre;



 
le typedef te permet d'avoir un certain polymorphisme dans ton code C (permettre à un objet d'un certain type d'etre utilisé à la place d'un autre), celà il ne fait que traduire en C le nom d'un type vers un autre.
 
C'est plus logique de faire

Code :
  1. typedef Type_noeud Arbre;


puis  
 

Code :
  1. Arbre * arbre;
  2. if( (arbre = ( Arbre * )malloc( sizeof( Arbre ) )) == NULL )
  3.    return -1;


 


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

  J'ai du mal avec les struct et les pointeurs ensemble !

 

Sujets relatifs
Petit probleme de pointeurs sur des tableaux d'une structure[C]Pointeurs
Templates et pointeurs de fonctions membres?Question pointeurs
debug : evolution des pointeurs[C] Possible de faire un extern sur une union de struct [RESOLU] ?
Generer un nombre aléatoire à l'exception d'un ensemble d'entiers ?Mais...a quoi servent les pointeurs???
[PHP] Question POO / pointeurs [résolu- presque]type d'une difference de pointeurs
Plus de sujets relatifs à : J'ai du mal avec les struct et les pointeurs ensemble !


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