Ciao a tutti.

Qualcuno mi sa spiegare il doppio puntatore assegnato ad una variabile?

Es: int **indice;ù
Il doppio puntatore non si "assegna ad una variabile", piuttosto si può dire che definisci una variabile di tipo doppio puntatore,o meglio puntatore a puntatore.
Allora tu sai (o almeno spero) che un puntatore non è che una variabile particolare atta a contenere un indirizzo di memoria.Questo indirizzo poi può essere l'indirizzo di una variabile,l'indirizzo di una funzione o l'indirizzo di un'altro indirizzo coem nel caso del punattore a puntatore.
in altri termini quando tu definisci una variabile del tipo
char* p, stai dicendo al compilatore che quella variabile punterà ad un carattere in memoria (in genere il primo carattere di una stringa) e che p+1 punterà al secondo carattere, p+2 al terzo etc..
Se invece definisci una variabile del tipo char** p, stati dicendo al compilatore che p punterà ad una cella di memoria il cui contenuto
sarà a sua volta un indirizzo (quello di un carattere in questo caso).

A cosa può servire un puntatore a puntatore?
Ad esempio può servire nel caso di una funzione che lavora con dei puntatori (manipolazione strutture dati dinamiche generalmente) e tu voglia modificare i valori di tali puntatori in maniera permanente in modo che le modifiche restino valide anche quando la funzione termina.E' il problema del passaggio per valore o per riferimento di una variabile,gli stessi principi che si applicano alle variabili normali si applicano anche ai puntatori.

Esempio:

Supponi di voler scrivere una funzione che prende come argomento un puntatore a carattere (di fatto una stringa) e incrementi il puntatore in modo che punti non al primo ma al secondio carattere della stringa.se tu fai quasto:

codice:
void ProssimoCarattere(char* stringa)
{
     stringa++;
} 

main()
{
     char* miastringa = "mamma";
     ProssimoCarattere(miastringa);
}
sia prima che dopo la funzione l'istruzione
*miastringa ritorna il carattere 'm'


se invece scrivi:
codice:
void ProssimoCarattere(char** stringa)
{
     (*stringa)++;
} 

main()
{
     char* miastringa = "mamma";
     ProssimoCarattere(&miastringa);
}
Prima della funzione *miastringa vale 'm'
ma dopo vale 'a'.

ciao