Passare puntatori alle funzioni
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 26 di 63.
Ora che hai compreso i limiti del passaggio per valore, scopriamo come passare puntatori alle funzioni risolve questo problema. Invece di passare una copia del valore di una variabile, puoi passare alla funzione l'indirizzo di memoria della variabile.
Quando passi un puntatore a una funzione, la funzione può accedere alla posizione in memoria della variabile originale. Ciò significa che la funzione può lavorare direttamente con i dati originali, non solo con una loro copia.
void processValue(int *ptr) {
// ptr contiene la dirección de la variable original
// La función ahora puede acceder a esa ubicación de memoria
}
int main() {
int x = 10;
processValue(&x); // Pasa la dirección de x
return 0;
}Nota come usiamo l'operatore indirizzo-di & quando chiamiamo la funzione per passare l'indirizzo della variabile. Il parametro della funzione è dichiarato come int *ptr, a indicare che si aspetta di ricevere un puntatore a un intero. Questa tecnica fondamentale apre potenti possibilità per far interagire le funzioni con i dati del tuo programma.
Sfida
FacileScrivi un programma C che mostri come passare puntatori alle funzioni. Il tuo programma dovrebbe:
- Creare una funzione denominata
displayValueche accetta un puntatore a un intero come parametro - All'interno della funzione
displayValue, usare l'operatore di dereferenziazione per accedere al valore all'indirizzo di memoria e stamparlo nel formato:Value at address: [value] - Nella funzione
main, dichiarare una variabile intera denominatanumbere inizializzarla con il valore 42 - Stampare il valore originale nel formato:
Original value: [value] - Chiamare la funzione
displayValuee passare l'indirizzo della variabilenumberusando l'operatore indirizzo - Dopo la chiamata alla funzione, stampare un messaggio di conferma:
Function call completed
Il tuo output dovrebbe mostrare che la funzione riceve e accede correttamente all'indirizzo di memoria della variabile originale:
Original value: 42
Value at address: 42
Function call completedQuesta sfida introduce il concetto fondamentale di passaggio dei puntatori alle funzioni, consentendo alla funzione di accedere alla posizione di memoria della variabile originale invece di lavorare con una copia del suo valore.
Provalo tu
#include <stdio.h>
// TODO: Scrivi qui la tua funzione displayValue
int main() {
// TODO: Scrivi qui il tuo codice
// 1. Dichiara e inizializza la variabile number
// 2. Stampa il valore originale
// 3. Chiama la funzione displayValue
// 4. Stampa il messaggio di completamento
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