Menu
Coddy logo textTech

Passare array alle funzioni

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 29 di 63.

Quando passi un array a una funzione in C, dietro le quinte succede qualcosa di interessante. L’array in sé non viene effettivamente copiato nella funzione. Invece, ciò che viene passato è un puntatore al primo elemento dell’array.

Questo significa che quando scrivi un parametro di funzione come int arr[] o int *arr, sono equivalenti: entrambi rappresentano un puntatore al primo elemento dell’array. La funzione riceve l’indirizzo di memoria in cui inizia l’array, ottenendo così accesso diretto ai dati dell’array originale.

void printArray(int arr[], int size) {
    // arr è in realtà un puntatore al primo elemento
    // La funzione può accedere all'array originale e modificarlo
}

Poiché la funzione lavora con la posizione in memoria dell'array originale anziché con una copia, qualsiasi modifica apportata all'interno della funzione influirà sull'array originale. Questo è diverso dal passare singole variabili, che crea copie.

Noterai anche che devi passare la dimensione dell'array come parametro separato, perché la funzione non può determinare la lunghezza dell'array dal solo puntatore.

challenge icon

Sfida

Facile

Scrivi un programma in C che dimostri come passare gli array alle funzioni creando una funzione che elabora i dati delle temperature. Il tuo programma dovrebbe:

  1. Creare una funzione denominata analyzeTemperatures che accetta come parametri un array di interi e la sua dimensione
  2. All'interno della funzione analyzeTemperatures, calcolare e stampare la temperatura media con esattamente 1 cifra decimale nel formato: Average temperature: [value]
  3. All'interno della funzione analyzeTemperatures, trovare e stampare la temperatura più alta nel formato: Highest temperature: [value]
  4. All'interno della funzione analyzeTemperatures, contare quante temperature sono superiori a 25 gradi e stampare il conteggio nel formato: Days above 25 degrees: [count]
  5. Nella funzione main, leggere un intero n che rappresenta il numero di rilevazioni della temperatura
  6. Leggere n valori di temperatura e memorizzarli in un array di interi
  7. Chiamare la funzione analyzeTemperatures, passando l'array e la sua dimensione

Il tuo programma dovrebbe elaborare i dati delle temperature e visualizzare i risultati dell'analisi. Per esempio, se l'input è:

5
20 28 15 32 26

L'output dovrebbe essere:

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

Questa sfida dimostra come gli array vengano passati alle funzioni come puntatori al loro primo elemento, consentendo alla funzione di accedere ed elaborare tutti gli elementi dell'array originale senza crearne una copia.

Provalo tu

#include <stdio.h>

// TODO: Crea qui la funzione analyzeTemperatures

int main() {
    // Leggi il numero di rilevazioni della temperatura
    int n;
    scanf("%d", &n);
    
    // Dichiara un array per memorizzare le temperature
    int temperatures[n];
    
    // Leggi i valori delle temperature
    for (int i = 0; i < n; i++) {
        scanf("%d", &temperatures[i]);
    }
    
    // TODO: Chiama qui la funzione analyzeTemperatures
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online