Les unions en C expliquées : Définition, utilisation et comparaison avec les structures
Les unions en C expliquées
Apprenez à définir, créer et accéder aux unions en C, et découvrez pourquoi elles diffèrent des structures dans la disposition mémoire et l'application.
Une union est un type défini par l'utilisateur en C qui, contrairement à une structure, ne peut contenir qu'une seule de ses valeurs membres à la fois. Cela rend les unions idéales pour des représentations de données économes en mémoire et le type-punning en programmation bas niveau.
Définition d'une union
Utilisez le mot-clé union pour déclarer un nouveau type. Par exemple :
union Car {
char name[50];
int price;
};
Le code ci-dessus crée un type dérivé union Car qui peut stocker soit une chaîne de 50 caractères, soit un prix entier.
Création de variables d'union
La définition d'une union n'alloue pas de mémoire. Pour l'utiliser, déclarez des variables de ce type :
union Car car1, car2, *car3;
Alternativement, vous pouvez combiner la définition et la déclaration de variables :
union Car {
char name[50];
int price;
} car1, car2, *car3;
Dans les deux exemples, car1 et car2 sont des instances d'union, tandis que car3 est un pointeur vers une union.
Accès aux membres d'une union
Utilisez l'opérateur point (.) pour l'accès direct et la flèche (->) pour l'accès via pointeur :
car1.price– accède au champ price decar1.car3->priceou(*car3).price– accède à price via un pointeur.
Unions vs Structures
Alors que les structures allouent assez d'espace pour tous les membres, la taille d'une union équivaut à la taille de son plus grand membre. Considérez cette comparaison :
#include <stdio.h>
union UnionJob {
char name[32];
float salary;
int workerNo;
} uJob;
struct StructJob {
char name[32];
float salary;
int workerNo;
} sJob;
int main() {
printf("taille de l'union = %zu octets\n", sizeof(uJob));
printf("taille de la structure = %zu octets", sizeof(sJob));
return 0;
}
Sortie :
taille de l'union = 32 taille de la structure = 40
Ici, la structure occupe 40 octets (32 + 4 + 4), tandis que l'union n'en occupe que 32 – la taille de son plus grand membre, name[32]. Tous les membres de l'union partagent la même région mémoire.
Exemple pratique : Écrasement de membre
#include <stdio.h>
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
j.workerNo = 100; // écrase la valeur précédente
printf("Salaire = %.1f\n", j.salary);
printf("Nombre d'ouvriers = %d", j.workerNo);
return 0;
}
Sortie :
Salaire = 0.0 Nombre d'ouvriers = 100
Puisque salary et workerNo partagent la même mémoire, l'écriture dans l'un efface l'autre.
Pour explorer des cas d'utilisation réels, lisez Pourquoi avons-nous besoin des unions en C ?.
Langue C
- Maîtriser les enums Java : guide complet des enums et classes enum
- Constructeurs d'enum Java expliqués avec exemple pratique
- Les unions en C : Gestion mémoire efficace pour types multiples
- Maîtriser le dimensionnement des vannes pneumatiques : Guide pratique
- Le marché de l'IA dans la fabrication devrait atteindre 4,8 milliards $ d'ici 2026, avec un TCAC de 28,1 %
- Guide pro pour couper barre aluminium en sécurité et avec précision
- Comprendre les raccords à union (pipe unions) : définition, usage et avantages
- Guide d'expert pour bien dimensionner votre climatiseur commercial pour une performance optimale
- Choisir la Taille de Tour pour l'Armurerie : Guide Complet