Originariamente inviato da Downloader
Ma sostanzialmente che differenza c'è tra un puntatore a void e un puntatore a un certo tipo??
In fondo l'indirizzo sempre quello è.
Certo... ma forse non conosci l'aritmetica dei puntatori: cosa succede se hai un puntatore a int che punta ad un array di double e cerchi di incrementarlo? Un int occupa 4 byte, mentre un double ne occupa 8... un incremento sul puntatore ti porta a metà del primo double e non sul double successivo.
codice:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^
+-- Puntatore ad intero su array di double
Dopo l'incremento di "Puntatore"
codice:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^
+-- Puntatore
Un incremento di un puntatore a double (come dovrebbe essere) ti avrebbe portato al secondo byte marcato come "0", mentre ora ti trovi solo a metà del primo double... questo perchè il compilatore sa che "Puntatore" è un puntatore ad intero e non a double, quindi lo porta avanti di soli 4 byte anzichè di 8.
Ora prova a immaginare cosa succede quando al posto di puntatori a semplici tipi primitivi, hai puntatori a strutture complesse...
Ciao.