Les unions en C : Gestion mémoire efficace pour types multiples
Une union est un type spécial en C permettant de stocker différents types de données au même emplacement mémoire. Vous définissez une union avec plusieurs membres, mais un seul membre peut contenir une valeur à un instant donné. Les unions offrent un moyen efficace d'utiliser le même emplacement mémoire pour plusieurs usages.
Définition d'une union
Utilisez l'instruction union comme pour struct :
union [balise_union] {
définition_membre;
définition_membre;
...
} [variables_union];
Exemple union Data avec trois membres :
union Data {
int i;
float f;
char str[20];
} data;
Une variable de type Data peut stocker un entier, un flottant, ou une chaîne. Un seul emplacement mémoire pour plusieurs types. La mémoire occupée = taille du plus grand membre (ici 20 octets pour str[20]).
Exemple : taille mémoire
#include <stdio.h>
#include <string.h>
union Data { int i; float f; char str[20]; };
int main() {
union Data data;
printf("Taille mémoire : %zu octets\n", sizeof(data));
return 0;
}
Résultat : Taille mémoire : 20 octets
Accès aux membres d'une union
Opérateur . (point) comme pour les structures. Mot-clé union pour déclarer.
Exemple : corruption si plusieurs membres utilisés
#include <stdio.h>
#include <string.h>
union Data { int i; float f; char str[20]; };
int main() {
union Data data;
data.i = 10;
data.f = 220.5;
strcpy(data.str, "C Programming");
printf("data.i : %d\n", data.i);
printf("data.f : %f\n", data.f);
printf("data.str : %s\n", data.str);
return 0;
}
Résultat (valeurs corrompues pour i et f) :
data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming
Seul le dernier membre écrit (str) conserve une valeur correcte.
Exemple : utilisation correcte (un membre à la fois)
#include <stdio.h>
#include <string.h>
union Data { int i; float f; char str[20]; };
int main() {
union Data data;
data.i = 10;
printf("data.i : %d\n", data.i);
data.f = 220.5;
printf("data.f : %f\n", data.f);
strcpy(data.str, "C Programming");
printf("data.str : %s\n", data.str);
return 0;
}
Résultat :
data.i : 10 data.f : 220.500000 data.str : C Programming
Tous les membres s'affichent correctement car un seul est utilisé à la fois.
Langue C
- Microprocesseurs : l'évolution de l'informatique à programme stocké
- Données Complètes Ampli Op : Fiches Techniques National Semiconductor & CA3130
- Comprendre les types de données C++ : Fondamentaux, modificateurs et bonnes pratiques
- Types de données en C expliqués : int, float, char et plus — Guide complet
- Les unions en C expliquées : Définition, utilisation et comparaison avec les structures
- Maîtriser les types de données Python : Guide pratique
- Comprendre les types de données en C : Guide complet
- Structures de données en C++ : Construire des programmes efficaces avec tableaux, structures et plus
- Maîtriser l'abstraction de données en C++ : Simplifier la conception par séparation interface-implémentation