I puntatori hanno moltissimi usi (elencarli tutti non credo sia conveniente).
Ti faccio un esempio per capire l'importanza di un puntatore:
se hai una funzione che riceve un parametro e questa funzione deve modificare questo parametro, senza nessun tipo di ritorno (una procedura, in poche parole, non una function) se non la modifica del parametro, devi dichiarare un puntatore:
Questo programma, per esempio, non visualizza il valore corretto: il quadrato di 4 è 16 non 4!
codice:
void elevaAlQuadrato(int parametro) {
parametro = parametro * parametro;
}
main() {
int a = 4;
elevaAlQuadrato(a);
printf("Il quadrato è: %d\n", a);
}
Questo, invece, lo visualizza corretto:
codice:
void elevaAlQuadrato (int *parametro) {
parametro = parametro * parametro;
}
main() {
int a = 4;
elevaAlQuadrato(&a);
printf("Il quadrato è: %d\n", a);
}
Come si può notare, nella funzione è dichiarato un puntatore ad intero e nella chiamata gli si passa l'indirizzo dell'intero. A questo punto, la funzione modifica il valore contenuto nell'indirizzo 'parametro' (il valore della variabile a) cosicchè 'a' verrà modificato.
Spero di essere stato sufficientemente chiaro (di solito non lo sono!)
Ciao.