Maîtriser les structures en C : Organiser des données complexes efficacement
Les tableaux stockent plusieurs éléments de même type. Une structure (struct) est un type utilisateur permettant de combiner des données de types différents.
Les structures représentent un enregistrement (record). Exemple : suivi de livres dans une bibliothèque avec : Titre, Auteur, Sujet, ID.
Définition d'une structure
Utilisez l'instruction struct :
struct [balise_structure] {
définition_membre;
définition_membre;
...
} [variables_structure];
balise_structure optionnelle. Chaque membre = définition de variable normale (int i;, float f;, etc.). Variables de structure optionnelles à la fin. Exemple Books :
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
Accès aux membres d'une structure
Opérateur d'accès aux membres : . (point) entre nom de variable et nom de membre. Utilisez struct pour déclarer des variables de ce type.
#include <stdio.h>
#include <string.h>
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1, Book2;
// Livre 1
strcpy(Book1.title, "C Programming");
strcpy(Book1.author, "Nuha Ali");
strcpy(Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
// Livre 2
strcpy(Book2.title, "Telecom Billing");
strcpy(Book2.author, "Zara Ali");
strcpy(Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
// Affichage
printf("Livre 1 : %s, %s, %s, %d\n", Book1.title, Book1.author, Book1.subject, Book1.book_id);
printf("Livre 2 : %s, %s, %s, %d\n", Book2.title, Book2.author, Book2.subject, Book2.book_id);
return 0;
}
Structures comme arguments de fonction
Passez une structure comme n'importe quelle variable ou pointeur.
void printBook(struct Books book); // prototype
void printBook(struct Books book) {
printf("Titre : %s\nAuteur : %s\nSujet : %s\nID : %d\n",
book.title, book.author, book.subject, book.book_id);
}
Pointeurs vers structures
Définition : struct Books *ptr;
Adresse : ptr = &Book1;
Accès aux membres via pointeur : opérateur -> (flèche) : ptr->title
Exemple avec pointeurs
void printBook(struct Books *book) {
printf("Titre : %s\n", book->title);
printf("Auteur : %s\n", book->author);
printf("Sujet : %s\n", book->subject);
printf("ID : %d\n", book->book_id);
}
int main() {
struct Books Book1, Book2;
// ... initialisation ...
printBook(&Book1);
printBook(&Book2);
return 0;
}
Champs de bits (Bit Fields)
Permettent de compacter des données dans une structure. Utile quand la mémoire est limitée.
- Regroupement de drapeaux 1 bit dans un mot machine.
- Lecture de formats de fichiers externes non standards (ex: entiers 9 bits).
Syntaxe : :largeur après le nom du membre dans la structure.
struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
unsigned int type:4;
unsigned int my_int:9;
} pack;
Ici : 4 drapeaux 1 bit, un champ 4 bits, un champ 9 bits. C les compacte au maximum (si largeur ≤ taille mot machine).
Langue C
- Structures C++ vs Classes : guide pratique pour développeurs embarqués
- Sémaphores dans Nucleus RTOS : Services utilitaires et structures de données
- Critique de livre : Digitalisez ou mourez — Blueprint pour la transformation pilotée par l'IoT
- Préserver l'humanité à l'ère de la technologie disruptive
- Révolution du stockage de données : nanostructures magnétiques de nouvelle génération avec capes d'invisibilité
- Top 17 des livres de programmation pour améliorer vos compétences en codage en 2021
- Structures de données Java : Exploration des classes de base et Collections Framework
- Typedef en C : Simplifier votre code avec des noms de types personnalisés
- Structures de données en C++ : Construire des programmes efficaces avec tableaux, structures et plus