I Puntatori sono un tipo di dato che consentono di allocare e di togliere lo spazio di memoria assegnato ad una variabile.
I puntatori contengono l'indirizzo in cui un determinato dato è reperibile, vengono utilizzati per la gestione dinamica della memoria.
Le variabili con tipo predefinito hanno uno spazio di memoria riservato ben preciso 8 bit 32 bit ecc... con i puntatori invece lo spazio di memoria non è fisso e viene determinato a run-time.
Come tutte le variabili i puntatori possono essere di tipo integer, real, char, string ecc...
Le sintassi per dichiarare un puntatore sono le seguenti:
type PuntatoreInteger=^Integer; var nome_variabile:PuntatoreInteger;
var nome_variabile:^Integer;
I puntatori vanno inizializzati con la procedura New(p:pointer). Tale procedura alloca un'area di memoria grande quanto un valore dello stesso tipo del puntatore.
Esempio:
program Puntatori_1; uses crt; type PuntatoreInteger=^Integer; var a:PuntatoreInteger; begin new(a); a^:=50; writeln('La variabile a ha per indirizzo una cella contente',a^); readln; end.
L'operatore ^ assegna un valore alla cella di memoria puntata dal puntatore. Quindi nell'esempio precedente il programma assegna alla cella di memoria puntata dal puntatore il valore 50.
Con l'operatore @ si ottiene invece l'indirizzo della cella di memoria di una variabile. Esempio:
program Puntatori_2; uses crt; var a,b:integer; c:^integer; begin clrscr; new(c); a:=50; b:=100; c:=@a; writeln('La cella di memoria puntata da c contiene ',c^); c:=@b; writeln('La cella di memoria puntata da c contiene ',c^); readln; end.