Langage c les unions

Fermé
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009 - 17 juin 2008 à 13:51
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 juin 2008 à 15:06
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 vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 juin 2008 à 15:06
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