C Unions (avec exemples)

Dans ce didacticiel, vous découvrirez les unions dans la programmation C. Plus précisément, comment créer des syndicats, accéder à ses membres et apprendre les différences entre les syndicats et les structures.

Une union est un type défini par l'utilisateur similaire aux structs en C, à l'exception d'une différence clé. Les structures allouent suffisamment d'espace pour stocker tous ses membres, tandis que les syndicats allouent l'espace pour stocker uniquement le membre le plus grand.

Comment définir un syndicat?

Nous utilisons le unionmot - clé pour définir les unions. Voici un exemple:

 union car ( char name(50); int price; ); 

Le code ci-dessus définit un type dérivé union car.

Créer des variables d'union

Lorsqu'une union est définie, elle crée un type défini par l'utilisateur. Cependant, aucune mémoire n'est allouée. Pour allouer de la mémoire pour un type d'union donné et travailler avec lui, nous devons créer des variables.

Voici comment nous créons des variables d'union.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Une autre façon de créer des variables d'union est:

 union car ( char name(50); int price; ) car1, car2, *car3; 

Dans les deux cas, les variables d'union car1, car2 et un pointeur d'union car3 de union cartype sont créés.

Accéder aux membres d'un syndicat

Nous utilisons l' .opérateur pour accéder aux membres d'un syndicat. Pour accéder aux variables de pointeur, nous utilisons également l' ->opérateur.

Dans l'exemple ci-dessus,

  • Pour accéder au prix de car1, car1.priceest utilisé.
  • Pour accéder au prix en utilisant car3, (*car3).priceou car3->pricepeut être utilisé.

Différence entre syndicats et structures

Prenons un exemple pour démontrer la différence entre les syndicats et les structures:

 #include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; ) 

Production

 taille de l'union = 32 taille de la structure = 40 

Pourquoi cette différence dans la taille des variables d'union et de structure?

Ici, la taille de sJob est de 40 octets car

  • la taille de name(32)est de 32 octets
  • la taille de salaryest de 4 octets
  • la taille de workerNoest de 4 octets

Cependant, la taille de uJob est de 32 octets. C'est parce que la taille d'une variable d'union sera toujours la taille de son plus grand élément. Dans l'exemple ci-dessus, la taille de son plus grand élément, ( name(32)), est de 32 octets.

Avec un syndicat, tous les membres partagent la même mémoire .

Exemple: accès aux membres du syndicat

 #include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )

Production

 Salaire = 0,0 Nombre de travailleurs = 100 

Pour savoir où les syndicats sont utilisés, visitez Pourquoi avons-nous besoin de syndicats C?

Articles intéressants...