Leçon 45 : Les Unions et leurs cas d'utilisation
Une Union est similaire à une structure, mais avec une différence cruciale : tous les membres d'une union partagent le même emplacement mémoire.
Définir et utiliser une union
Règle : La taille d'une union est égale à la taille de son plus grand membre.
c union Donnees { int i; float f; char str[20]; };
int main() { union Donnees ma_donnee;
// La mémoire est assez grande pour le plus grand membre (str, 20 octets).
printf("Taille mémoire occupée par Donnees : %zu\n", sizeof(ma_donnee)); // Résultat : ~20
// 1. Affecter une valeur à 'i'
ma_donnee.i = 10;
printf("ma_donnee.i : %d\n", ma_donnee.i);
// 2. Affecter une valeur à 'f' (cela écrase la mémoire où 'i' était stocké)
ma_donnee.f = 220.5;
printf("ma_donnee.f : %f\n", ma_donnee.f);
// 3. Tenter de lire 'i' maintenant donne une valeur résiduelle (mémoire écrasée)
printf("ma_donnee.i (après mise à jour de f) : %d\n", ma_donnee.i);
return 0;
}
Cas d'utilisation
- Optimisation de la mémoire : Les unions sont utilisées lorsque vous savez qu'un seul des membres sera utilisé à la fois, économisant ainsi de l'espace.
- Type Punning : Utilisé en programmation de bas niveau pour interpréter le même bloc de mémoire de différentes manières (ex: lire un entier comme une séquence de caractères).