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

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

Marsh Posté le 16-11-2004 à 11:47:48    

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]
 
 

Reply

Marsh Posté le 16-11-2004 à 11:47:48   

Reply

Marsh Posté le 16-11-2004 à 11:59:05    

NounouRs a écrit :


Comment peut on s'en servir ??


Peux-tu être plus précis ?

Reply

Marsh Posté le 16-11-2004 à 12:13:23    

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
Reply

Marsh Posté le 16-11-2004 à 13:07:50    

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;


 

Reply

Sujets relatifs:

Leave a Replay

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