Puntatori e Passaggio di Parametri
Un puntatore in C è una variabile che, invece di contenere un valore diretto (come 17 o 'A'), contiene un indirizzo di memoria in cui è memorizzato un altro oggetto.
Ci sono due operatori fondamentali da ricordare:
&(Address-of): Restituisce l’indirizzo di memoria di una variabile.*(Indirezione/Dereferenziazione): Permette di accedere o modificare il valore contenuto nell’indirizzo puntato.
Il problema dello “Swap” (Scambio)
Section titled “Il problema dello “Swap” (Scambio)”Il C è un linguaggio con passaggio pass-by-value (passaggio per valore). Quando passi una variabile a una funzione, il C ne fa una copia. Qualsiasi modifica effettuata dentro la funzione agisce sulla copia, non sulla variabile originale.
Guarda cosa succede se cerchiamo di scambiare due numeri in modo ingenuo:
void swap_errato(int a, int b) { int t = a; a = b; b = t; // a e b qui sono stati scambiati, ma l'originale nel main no!}La soluzione: Passaggio per Riferimento Simolato
Section titled “La soluzione: Passaggio per Riferimento Simolato”Per modificare le variabili originali, dobbiamo passare alla funzione i loro indirizzi tramite puntatori. All’interno della funzione, useremo l’operatore * per accedere alla vera scatola di memoria.
💻 Esercizio Pratico
Section titled “💻 Esercizio Pratico”Il codice sottostante tenta di scambiare le variabili x e y, ma usa il passaggio per valore e quindi fallisce. Correggilo modificando la funzione swap affinché accetti i puntatori, e aggiorna la chiamata nel main passandogli gli indirizzi con &.