Langage c les unions

alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, svp j ai ce pb avec les unions lorsque je declare une union je ne sais pas comment l utiliser dans le cadre des piles voici le code j ai une petite erreur au niveau des données et je ne sais pas s il fo par exemple empiler les 2 membres du champ a la fois ou chacun
typedef union ElementListe{
char donnee;
int val;
union ElementListe *suivant;
} Element;

typedef struct ListeRepere{
Element *debut;
int taille;
} Pile;

apres dans empiler et depiler je ne sais comment faire si je veux empiler l un ou lautre ou je dois empiler les 2 comme suis
int empiler (Pile * tas, char donnee,int val){
Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
return -1;

nouveau_element->donnee=donnee;
nouveau_element->val=val;
nouveau_element->suivant = tas->debut;
tas->debut = nouveau_element;
tas->taille++;

merci d avance
A voir également:

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
un peu confus ce que tu nous raconte là.
Je maitrise peu les union, mais ta définition de Element me parait étrange.
Pour moi un union c'est une struct dont chaque membre occupe la même mémoire. Donc lorsque tu modifie Element::suivant, tu modifie donnee ET val. (Encore dans ce sens pourquoi pas), et lorsque tu modifie val ou donnee tu modifie suivant, et là c'est dangereux car c'est un pointeur. Après, il y a peut être une nuance des union qui m'échappe.
Donc, ce que tu fait dans ta fonction, empiler, je trouve ça étrange.
2