Passage de tableaux aux fonctions
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 29 sur 63.
Lorsque vous passez un tableau à une fonction en C, quelque chose d'intéressant se produit en coulisses. Le tableau lui-même n'est pas réellement copié dans la fonction. Au lieu de cela, ce qui est transmis est un pointeur vers le premier élément du tableau.
Cela signifie que lorsque vous écrivez un paramètre de fonction comme int arr[] ou int *arr, les deux sont équivalents - ils représentent tous deux un pointeur vers le premier élément du tableau. La fonction reçoit l'adresse mémoire où le tableau commence, ce qui lui donne un accès direct aux données du tableau d'origine.
void printArray(int arr[], int size) {
// arr est en réalité un pointeur vers le premier élément
// La fonction peut accéder au tableau d'origine et le modifier
}Puisque la fonction travaille avec l'emplacement mémoire du tableau d'origine plutôt qu'avec une copie, toute modification effectuée à l'intérieur de la fonction affectera le tableau d'origine. Ceci est différent du passage de variables individuelles, qui crée des copies.
Vous remarquerez également que vous devez passer la taille du tableau en tant que paramètre distinct, car la fonction ne peut pas déterminer la longueur du tableau uniquement à partir du pointeur.
Défi
FacileÉcrivez un programme en C qui illustre le passage de tableaux à des fonctions en créant une fonction qui traite des données de température. Votre programme doit :
- Créer une fonction nommée
analyzeTemperaturesqui prend un tableau d'entiers et sa taille en paramètres - À l'intérieur de la fonction
analyzeTemperatures, calculer et afficher la température moyenne avec exactement 1 décimale au format :Average temperature: [value] - À l'intérieur de la fonction
analyzeTemperatures, trouver et afficher la température la plus élevée au format :Highest temperature: [value] - À l'intérieur de la fonction
analyzeTemperatures, compter combien de températures sont supérieures à 25 degrés et afficher le compte au format :Days above 25 degrees: [count] - Dans la fonction
main, lire un entiernreprésentant le nombre de relevés de température - Lire
nvaleurs de température et les stocker dans un tableau d'entiers - Appeler la fonction
analyzeTemperatures, en passant le tableau et sa taille
Votre programme doit traiter les données de température et afficher les résultats de l'analyse. Par exemple, si l'entrée est :
5
20 28 15 32 26Votre sortie doit être :
Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3Ce défi démontre comment les tableaux sont passés aux fonctions en tant que pointeurs vers leur premier élément, permettant à la fonction d'accéder et de traiter tous les éléments du tableau d'origine sans créer de copie.
Aide-mémoire
Lors du passage de tableaux à des fonctions en C, le tableau lui-même n'est pas copié. Au lieu de cela, un pointeur vers le premier élément est transmis.
Les deux int arr[] et int *arr sont des paramètres de fonction équivalents - ils représentent un pointeur vers le premier élément :
void printArray(int arr[], int size) {
// arr est en réalité un pointeur vers le premier élément
// La fonction peut accéder au tableau d'origine et le modifier
}Points clés :
- Les fonctions reçoivent l'adresse mémoire où commence le tableau
- Les modifications effectuées à l'intérieur de la fonction affectent le tableau d'origine
- La taille du tableau doit être transmise en tant que paramètre distinct car la fonction ne peut pas déterminer la longueur à partir du seul pointeur
Essayez vous-même
#include <stdio.h>
// À FAIRE : Créer la fonction analyzeTemperatures ici
int main() {
// Lire le nombre de relevés de température
int n;
scanf("%d", &n);
// Déclarer un tableau pour stocker les températures
int temperatures[n];
// Lire les valeurs de température
for (int i = 0; i < n; i++) {
scanf("%d", &temperatures[i]);
}
// À FAIRE : Appeler la fonction analyzeTemperatures ici
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes