Structures vs Unions en C : Guide pratique
Qu'est-ce qu'une structure ?
Une structure est un type de données défini par l'utilisateur en C qui regroupe des éléments de données logiquement liés de types différents en une seule unité. Chaque membre occupe sa propre emplacement mémoire contigu, donc une structure peut contenir plusieurs valeurs simultanément.
Exemple : un enregistrement d'étudiant qui stocke un nom, numéro de matricule et notes sous un seul nom de variable.
Qu'est-ce qu'une union ?
Une union est aussi un type défini par l'utilisateur, mais tous les membres partagent le même espace mémoire. La taille de l'union équivaut à la taille de son plus grand membre. Cette caractéristique rend les unions idéales pour les scénarios à mémoire contrainte où un seul membre est nécessaire à la fois.
Déclaration d'une structure
struct Student {
char name[60];
int roll_no;
float marks;
};
Remarquez l'utilisation du mot-clé struct et le point-virgule après l'accolade fermante.
Exemple : Utilisation d'une structure
#include <stdio.h>
struct Student {
char name[60];
int roll_no;
float marks;
} sdt;
int main(void) {
printf("Enter the following information:\n");
printf("Student name: ");
fgets(sdt.name, sizeof(sdt.name), stdin);
printf("Roll number: ");
scanf("%d", &sdt.roll_no);
printf("Marks: ");
scanf("%f", &sdt.marks);
printf("\nEntered data:\n");
printf("Name: %s", sdt.name);
printf("Roll number: %d\n", sdt.roll_no);
printf("Marks: %.1f\n", sdt.marks);
return 0;
}
Sortie (exemple) :
Enter the following information: Student name: James Roll number: 21 Marks: 67 Entered data: Name: James Roll number: 21 Marks: 67.0
Déclaration d'une union
union Item {
int x;
float y;
char ch;
};
Exemple : Utilisation d'une union
#include <stdio.h>
union Item {
int x;
float y;
char ch;
};
int main(void) {
union Item it;
it.x = 12;
it.y = 20.2f;
it.ch = 'a';
printf("x = %d\n", it.x);
printf("y = %f\n", it.y);
printf("ch = %c\n", it.ch);
return 0;
}
Puisque tous les membres partagent la mémoire, la définition de ch écrase les valeurs précédentes de x et y. Seule la dernière valeur stockée est valide.
Structure vs Union
| Caractéristique | Structure | Union |
|---|---|---|
| Mot-clé de déclaration | struct | union |
| Disposition mémoire | Chaque membre a son propre espace | Tous les membres partagent un espace |
| Modification d'un membre | N'affecte pas les autres | Écrase les autres membres |
| Initialisation | Tous les membres peuvent être initialisés simultanément | Seul le premier membre peut être initialisé à la fois |
| Taille totale | Somme de toutes les tailles des membres | Taille du plus grand membre |
| Utilisation typique | Stocker des données liées de types variés | Stocker l'un de plusieurs types possibles |
| Modèle d'accès | Tout membre accessible à tout moment | Un seul membre valide à la fois |
| Support tableau flexible | Supporté | Non supporté |
Quand utiliser chacun
- Structure : Quand vous devez maintenir plusieurs champs liés simultanément, comme un enregistrement d'étudiant ou d'employé.
- Union : Quand vous avez une valeur qui pourrait être de plusieurs types mais un seul à la fois, comme un type variant ou une valeur de capteur à mémoire contrainte.
Avantages et inconvénients
Avantages des structures
- Regroupe les données liées sous un seul nom, améliorant la lisibilité.
- Facile de passer des enregistrements entiers aux fonctions.
- Les tableaux de structures permettent le stockage de nombreux enregistrements.
- Supportent les tableaux flexibles pour les données de longueur variable.
Inconvénients des structures
- Nécessitent plus de mémoire, car chaque membre est stocké.
- Les changements à la définition de structure se propagent dans tout le code.
- Peuvent devenir difficiles à gérer dans les grands projets avec des structures profondément imbriquées.
Avantages des unions
- Empreinte mémoire minimale : seulement la taille du plus grand membre.
- Utile pour implémenter des étiquettes de type ou données variantes.
- Peut simplifier le code qui utilise une seule valeur de type variable.
Inconvénients des unions
- Un seul membre peut contenir une valeur valide à la fois.
- Plus difficile à déboguer à cause de la mémoire partagée.
- Ne peuvent pas utiliser de tableaux flexibles.
Langue C
- Amiante vs Fibre de Verre : Différences Clés, Utilisations et Considérations de Sécurité
- Struct vs Class en C++ : Différences Clés, Syntaxe et Cas d'Utilisation Optimaux
- C# vs C++ : Comparaison claire des fonctionnalités, performances et cas d'usage
- C vs C++ : Différences clés et quand choisir chacun
- C vs Java : Comparatif complet des fonctionnalités, de l'histoire et des applications
- strlen() vs sizeof() en C : Comprendre leurs différences et usage correct
- Comprendre les Moteurs DC vs AC : Différences Clés et Guide d'Achat
- Brasage vs Soudure : Différences Clés Expliquées
- Moteurs 2 temps vs 4 temps : différences clés expliquées