Menu
Coddy logo textTech

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.

challenge icon

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 :

  1. Créer une fonction nommée analyzeTemperatures qui prend un tableau d'entiers et sa taille en paramètres
  2. À l'intérieur de la fonction analyzeTemperatures, calculer et afficher la température moyenne avec exactement 1 décimale au format : Average temperature: [value]
  3. À l'intérieur de la fonction analyzeTemperatures, trouver et afficher la température la plus élevée au format : Highest temperature: [value]
  4. À 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]
  5. Dans la fonction main, lire un entier n représentant le nombre de relevés de température
  6. Lire n valeurs de température et les stocker dans un tableau d'entiers
  7. 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 26

Votre sortie doit être :

Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3

Ce 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;
}
quiz iconTestez-vous

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