Maîtriser les structures et pointeurs en C : Guide pratique
Maîtriser les structures et pointeurs en C : Guide pratique
Découvrez comment utiliser les pointeurs pour naviguer dans les membres de structures, et apprenez l'allocation dynamique de mémoire pour des structures de données flexibles en C.
Avant de plonger dans les pointeurs avec les structures, familiarisez-vous avec ces sujets fondamentaux :
Utilisation de pointeurs pour référencer des structures
Voici un exemple concis montrant comment déclarer une structure et un pointeur qui la référence.
struct Person {
int member1;
int member2;
/* membres additionnels */
};
int main(void) {
struct Person *ptr, harry;
/* ptr peut maintenant pointer vers n'importe quelle instance Person */
}
Dans cet extrait, ptr est un pointeur vers une instance de struct Person.
Exemple : Accès aux membres de structure via un pointeur
Pour lire ou écrire les champs d'une structure via un pointeur, utilisez l'opérateur ->.
#include <stdio.h>
struct Person {
int age;
float weight;
};
int main(void) {
struct Person *personPtr, person1;
personPtr = &person1; /* pointe vers person1 */
printf("Entrez l'âge : ");
scanf("%d", &personPtr->age);
printf("Entrez le poids : ");
scanf("%f", &personPtr->weight);
printf("\nAffichage :\n");
printf("Âge : %d\n", personPtr->age);
printf("Poids : %f", personPtr->weight);
return 0;
}
Ici, personPtr = &person1; stocke l'adresse de person1 dans personPtr. L'accès ultérieur via personPtr->field est équivalent à (*personPtr).field, offrant une syntaxe concise.
personPtr->ageest identique à(*personPtr).agepersonPtr->weightest identique à(*personPtr).weight
Allocation dynamique de mémoire pour les structures
Lorsque le nombre d'instances de structure requis n'est pas connu à la compilation, allouez de la mémoire à l'exécution en utilisant la bibliothèque standard C.
Exemple : Allocation d'un tableau de structures
#include <stdio.h>
#include <stdlib.h>
struct Person {
int age;
float weight;
char name[30];
};
int main(void) {
struct Person *ptr;
int i, n;
printf("Entrez le nombre de personnes : ");
scanf("%d", &n);
ptr = (struct Person*)malloc(n * sizeof(struct Person));
if (!ptr) {
fprintf(stderr, "Échec de l'allocation mémoire\n");
return EXIT_FAILURE;
}
for (i = 0; i < n; ++i) {
printf("Entrez le prénom et l'âge respectivement : ");
scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
}
printf("\nAffichage des informations :\n");
for (i = 0; i < n; ++i) {
printf("Nom : %s\tÂge : %d\n", (ptr + i)->name, (ptr + i)->age);
}
free(ptr);
return 0;
}
L'exécution du programme produit :
Entrez le nombre de personnes : 2 Entrez le prénom et l'âge respectivement : Harry 24 Entrez le prénom et l'âge respectivement : Gary 32 Affichage des informations : Nom : Harry Âge : 24 Nom : Gary Âge : 32
Cet exemple montre comment créer n instances de struct Person sur le tas, lire les entrées utilisateur dans chacune, puis afficher les résultats.
Langue C
- Comprendre les mots-clés et identificateurs C# : règles, listes et bonnes pratiques
- Classes et objets C# : Fondations pour une POO robuste
- Maîtriser les classes et méthodes abstraites C# : Guide pratique
- Comprendre les classes et méthodes partielles C#
- Maîtriser les classes et méthodes sealed en C# : Quand les utiliser, exemples clairs et sécurité du code
- Comprendre les structures C# : Définition, utilisation et différences clés
- Mots-clés et identificateurs en C : Guide pratique
- Maîtriser les pointeurs en C : Tutoriel pratique guidé par des experts
- Comprendre la relation entre les tableaux et les pointeurs en C