Skip to content

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 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.

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 &.