Maîtriser les structures en C : Passage, retour et gestion par référence
Structures en C : Passage, retour et gestion par référence
En programmation C, les structures permettent de regrouper des données liées en une seule entité. Ce guide vous explique trois opérations essentielles avec les structures : les passer aux fonctions, les retourner depuis les fonctions, et les manipuler par référence. Chaque section inclut une explication concise et un exemple fonctionnel pour solidifier votre compréhension.
Passage de structures aux fonctions
Tout comme les types intégrés, les variables de structure peuvent être passées directement à une fonction. Avant de plonger, il est utile de réviser les structures en C, les fonctions en C et les fonctions définies par l'utilisateur.
- Structures en C
- Fonctions en C
- Fonction définie par l'utilisateur
L'exemple suivant montre comment passer un struct student à une fonction qui affiche son contenu.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Prototype de fonction
void display(struct student s);
int main() {
struct student s1;
printf("Entrez le nom : ");
scanf("%[^ ]%%*c", s1.name); // lecture jusqu'au saut de ligne
printf("Entrez l'âge : ");
scanf("%d", &s1.age);
display(s1); // passage de la structure à la fonction
return 0;
}
void display(struct student s) {
printf("\nAffichage des informations\n");
printf("Nom : %s", s.name);
printf("\nÂge : %d", s.age);
}
Sortie
Entrez le nom : Bond Entrez l'âge : 13 Affichage des informations Nom : Bond Âge : 13
Retour d'une structure depuis une fonction
Les fonctions peuvent retourner des structures entières, permettant une séparation claire entre la collecte des données et leur traitement. L'exemple ci-dessous collecte les informations d'un étudiant dans une fonction et la retourne à main.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Prototype de fonction
struct student getInformation();
int main() {
struct student s;
s = getInformation();
printf("\nAffichage des informations\n");
printf("Nom : %s", s.name);
printf("\nÂge : %d", s.age);
return 0;
}
struct student getInformation() {
struct student s1;
printf("Entrez le nom : ");
scanf("%[^ ]%%*c", s1.name);
printf("Entrez l'âge : ");
scanf("%d", &s1.age);
return s1;
}
Le type de retour de la fonction correspond à la structure qu'elle retourne, assurant la sécurité de type et la clarté.
Passage d'une structure par référence
Lorsque vous avez besoin qu'une fonction modifie une structure, passez son adresse (c'est-à-dire un pointeur). Cela est analogue au passage des types intégrés par référence. L'exemple suivant additionne deux nombres complexes et stocke le résultat via un pointeur.
#include <stdio.h>
typedef struct Complex {
float real;
float imag;
} complex;
void addNumbers(complex c1, complex c2, complex *result);
int main() {
complex c1, c2, result;
printf("Pour le premier nombre,\n");
printf("Entrez la partie réelle : ");
scanf("%f", &c1.real);
printf("Entrez la partie imaginaire : ");
scanf("%f", &c1.imag);
printf("Pour le second nombre,\n");
printf("Entrez la partie réelle : ");
scanf("%f", &c2.real);
printf("Entrez la partie imaginaire : ");
scanf("%f", &c2.imag);
addNumbers(c1, c2, &result);
printf("\nresult.real = %.1f\n", result.real);
printf("result.imag = %.1f", result.imag);
return 0;
}
void addNumbers(complex c1, complex c2, complex *result) {
result->real = c1.real + c2.real;
result->imag = c1.imag + c2.imag;
}
Sortie
Pour le premier nombre, Entrez la partie réelle : 1.1 Entrez la partie imaginaire : -2.4 Pour le second nombre, Entrez la partie réelle : 3.4 Entrez la partie imaginaire : -3.2 result.real = 4.5 result.imag = -5.6
Comme result est passé par référence, toute modification dans addNumbers affecte immédiatement la variable dans main.
En maîtrisant ces techniques, vous pouvez écrire du code C plus modulaire, lisible et efficace qui exploite toute la puissance des structures.
Langue C
- Comprendre les structures C# : Définition, utilisation et différences clés
- Fonctions amies et classes amies en C++ : Maîtriser le contrôle d'accès
- Maîtriser les structures en C : Définition, variables, accès et exemples avancés
- Maîtriser les structures et pointeurs en C : Guide pratique
- Comprendre la structure d'un programme C : Guide pour débutants
- Comprendre les types de données en C : Guide complet
- Constantes et littéraux en C : Types, utilisation et bonnes pratiques
- Maîtriser les fonctions en C : Structure, déclaration et bonnes pratiques
- Maîtriser la surcharge en C++ : Fonctions et opérateurs expliqués