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.
Sfida
FacileScrivi 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:
- Creare una funzione denominata
analyzeTemperaturesche accetta come parametri un array di interi e la sua dimensione - All'interno della funzione
analyzeTemperatures, calcolare e stampare la temperatura media con esattamente 1 cifra decimale nel formato:Average temperature: [value] - All'interno della funzione
analyzeTemperatures, trovare e stampare la temperatura più alta nel formato:Highest temperature: [value] - All'interno della funzione
analyzeTemperatures, contare quante temperature sono superiori a 25 gradi e stampare il conteggio nel formato:Days above 25 degrees: [count] - Nella funzione
main, leggere un interonche rappresenta il numero di rilevazioni della temperatura - Leggere
nvalori di temperatura e memorizzarli in un array di interi - 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 26L'output dovrebbe essere:
Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3Questa 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;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online