Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Unions | Compréhension des Structs et de la Mémoire
Maîtriser les Structs en C

bookUnions

Note
Définition

Une union est un type de donnée défini par l'utilisateur en C, similaire à une structure. La principale différence est que tous ses membres partagent le même emplacement mémoire. À un moment donné, un seul membre peut contenir une valeur.

Les unions sont rarement utilisées, mais elles sont utiles lorsque l'on souhaite qu'une variable puisse contenir différents types de données à différents moments tout en économisant de la mémoire.

Les données sont situées dans la même zone mémoire pour tous les membres de l'union. Cela signifie que tous les membres de l'union partagent la même adresse mémoire, et la taille de l'union est égale à la taille de son plus grand membre.

L'utilisation principale d'une union est d'imposer différents types de données sur une même zone mémoire commune, c'est-à-dire la représentation d'une seule zone mémoire sous différents types de données.

Puisque dans une union les champs partagent la même cellule mémoire, il est possible de traiter les mêmes données de différentes manières :

main.c

main.c

copy
12345678910111213141516
#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }

Dans cet exemple, les variables data.a et data.b partagent la même mémoire. Nous avons attribué la valeur 77 à a, mais nous pouvons interpréter les mêmes octets comme un caractère dans b.

Alignement dans les unions

Comme les structures, les unions utilisent également l'alignement et le remplissage. Le compilateur peut ajouter des octets supplémentaires afin que chaque membre commence à la bonne frontière mémoire.

main.c

main.c

copy
12345678910111213
#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }

Une union ne peut stocker qu'une seule valeur à la fois, et sa taille est égale à celle de son plus grand membre. Dans l'exemple avec int a (4 octets), double b (8 octets) et char c[20], la taille minimale de l'union est de 20 octets. Cependant, le compilateur peut ajouter des octets supplémentaires pour l'alignement, afin que double ou int commencent à la bonne frontière mémoire. Par conséquent, sizeof(union Data) peut être supérieur à 20, par exemple, 24 octets.

Tâche

Swipe to start coding

L'union Data stocke chaque valeur en tant que int et permet d'accéder à la même valeur en tant que char. La fonction doit parcourir le tableau et afficher chaque valeur à la fois sous forme d'entier et sous forme de caractère ASCII correspondant.

La fonction accepte deux paramètres : un tableau d'entiers (values) et sa longueur (n).

  1. Utiliser une union Data avec deux membres : int a et char b.
  2. Dans une boucle for, parcourir les éléments du tableau de 0 à n.
  3. Affecter l'élément courant du tableau au membre int de l'union (data.a).
  4. Afficher la valeur entière data.a et la représentation en caractère data.b.

Exemple

{65, 66, 67, 68, 69} =>

Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E

Solution

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

close

bookUnions

Glissez pour afficher le menu

Note
Définition

Une union est un type de donnée défini par l'utilisateur en C, similaire à une structure. La principale différence est que tous ses membres partagent le même emplacement mémoire. À un moment donné, un seul membre peut contenir une valeur.

Les unions sont rarement utilisées, mais elles sont utiles lorsque l'on souhaite qu'une variable puisse contenir différents types de données à différents moments tout en économisant de la mémoire.

Les données sont situées dans la même zone mémoire pour tous les membres de l'union. Cela signifie que tous les membres de l'union partagent la même adresse mémoire, et la taille de l'union est égale à la taille de son plus grand membre.

L'utilisation principale d'une union est d'imposer différents types de données sur une même zone mémoire commune, c'est-à-dire la représentation d'une seule zone mémoire sous différents types de données.

Puisque dans une union les champs partagent la même cellule mémoire, il est possible de traiter les mêmes données de différentes manières :

main.c

main.c

copy
12345678910111213141516
#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }

Dans cet exemple, les variables data.a et data.b partagent la même mémoire. Nous avons attribué la valeur 77 à a, mais nous pouvons interpréter les mêmes octets comme un caractère dans b.

Alignement dans les unions

Comme les structures, les unions utilisent également l'alignement et le remplissage. Le compilateur peut ajouter des octets supplémentaires afin que chaque membre commence à la bonne frontière mémoire.

main.c

main.c

copy
12345678910111213
#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }

Une union ne peut stocker qu'une seule valeur à la fois, et sa taille est égale à celle de son plus grand membre. Dans l'exemple avec int a (4 octets), double b (8 octets) et char c[20], la taille minimale de l'union est de 20 octets. Cependant, le compilateur peut ajouter des octets supplémentaires pour l'alignement, afin que double ou int commencent à la bonne frontière mémoire. Par conséquent, sizeof(union Data) peut être supérieur à 20, par exemple, 24 octets.

Tâche

Swipe to start coding

L'union Data stocke chaque valeur en tant que int et permet d'accéder à la même valeur en tant que char. La fonction doit parcourir le tableau et afficher chaque valeur à la fois sous forme d'entier et sous forme de caractère ASCII correspondant.

La fonction accepte deux paramètres : un tableau d'entiers (values) et sa longueur (n).

  1. Utiliser une union Data avec deux membres : int a et char b.
  2. Dans une boucle for, parcourir les éléments du tableau de 0 à n.
  3. Affecter l'élément courant du tableau au membre int de l'union (data.a).
  4. Afficher la valeur entière data.a et la représentation en caractère data.b.

Exemple

{65, 66, 67, 68, 69} =>

Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3
single

single

some-alt