English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à utiliser les unions en langage C. Plus précisément, comment créer une union, accéder à ses membres et comprendre la différence entre une union et une structure. Les unions sont également appelées unions, et elles appartiennent au même type de structure que les structures en langage C.
L'union est un type de données spécial qui permet de stocker différents types de données à la même adresse mémoire. Vous pouvez définir une union avec plusieurs membres, mais à tout moment, seul un membre peut avoir une valeur. L'union fournit un moyen efficace d'utiliser la même adresse mémoire.
L'union est également un type utilisateur défini, similaire à l'union en C.structIl y a une différence d'un seul mot-clé. La structure alloue suffisamment d'espace pour stocker tous ses membres, tandis que l'union alloue de l'espace uniquement pour le membre le plus grand.
Nous utilisons la clé de mots union pour définir une union. Voici un exemple :
union car { char name[50]; int prix; };
Le code ci-dessus définit le type dérivé union car.
Après avoir défini l'union, elle créera un type utilisateur défini. Mais, pas d'allocation de mémoire. Pour allouer de la mémoire pour un type union donné et l'utiliser, nous devons créer une variable.
C'est la manière dont nous créons une variable union.
union car { char name[50]; int prix; }; int main() { union car car1, car2, *car3; return 0; }
Un autre moyen de créer une variable union est :
union car { char name[50]; int prix; }1, car2, *car3;
Dans ces deux cas, un variable union de type union car sera créé1、car2et le pointeur union car3。
Nous utilisons l'opérateur . pour accéder aux membres de l'union. Pour accéder aux variables pointeur, nous utilisons également-> opérateur.
Dans l'exemple ci-dessus,
Pour accéder à car1le prix (prix), utiliser car1.prix.
Pour accéder à car3le prix (prix), peut être utilisé par (* car3).prix ou car3-> prix.
Laissez-nous prendre un exemple pour expliquer la différence entre l'union et la structure :
#include <stdio.h> union unionJob { //Définir une union char name[32]; float salary; int workerNo; } uJob; struct structJob { char name[32]; float salary; int workerNo; } sJob; int main() { printf("union 的大小 = %d 字节", sizeof(uJob)); printf("\nstruct 的大小 = %d 字节", sizeof(sJob)); return 0; }
Résultat de la sortie
la taille de union = 32 octets la taille de structure = 40 octets
Pourquoi la taille des variables union et structure existe-t-il une telle différence ?
dans ce cas, la taille de sJob est de40 octets, car
name[32]taille est de32octets
la taille de salary est de4octets
la taille de workerNo est de4octets
mais, la taille de uJob est de32octets. C'est parce que la taille de la variable union sera toujours la taille de son élément le plus grand. Dans l'exemple ci-dessus, l'élément le plus grand (name[32])taille est de32octets.
En utilisant l'union, tous les membres partagentmémoire partagée。
#include <stdio.h> union Job { float salary; int workerNo; } j; int main() { j.salary =; 12.3; //lorsque j.workerNo est affecté // j.salary ne sera plus conservé12.3 j.workerNo = 100; printf("Salaire = %.1f\n", j.salary); printf("Nombre d'ouvriers = %d", j.workerNo); return 0; }
Résultat de la sortie
Salaire = 0.0 Nombre d'ouvriers = 100