Ciao a tutti.
Qualcuno mi sa spiegare il doppio puntatore assegnato ad una variabile?
Es: int **indice;ù
Grazie
Ciao a tutti.
Qualcuno mi sa spiegare il doppio puntatore assegnato ad una variabile?
Es: int **indice;ù
Grazie
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.Ciao a tutti.
Qualcuno mi sa spiegare il doppio puntatore assegnato ad una variabile?
Es: int **indice;ù
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:
sia prima che dopo la funzione l'istruzionecodice:void ProssimoCarattere(char* stringa) { stringa++; } main() { char* miastringa = "mamma"; ProssimoCarattere(miastringa); }
*miastringa ritorna il carattere 'm'
se invece scrivi:
Prima della funzione *miastringa vale 'm'codice:void ProssimoCarattere(char** stringa) { (*stringa)++; } main() { char* miastringa = "mamma"; ProssimoCarattere(&miastringa); }
ma dopo vale 'a'.
ciao
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Grazie molto esauriente!!