Written by xinyiman Ottobre 25, 2011, 12:43:00 pm24306 ViewsRating: (1 Rates)Print
Premessa: molto semplicemente si può immaginare la
memoria come un insieme di celle di vari tipi, che rappresentano le
variabili, ed ognuna di queste celle per essere raggiunta deve avere
un indirizzo che rappresenta la sua posizione all'interno della
memoria. Una volta capito questo concetto si può capire che un
puntatore è semplicemente una variabile che contiene l'indirizzo di
un altra variabile. Questo rende i puntatori uno strumento molto
potente, ma anche molto pericoloso, perché se si commettono errori è
possibile modificare aree di memoria che non volevamo toccare. Per
dichiarare un puntatore è buona norma farlo tramite il costrutto
type che abbiamo già visto precedentemente (in un altro articolo). Facciamo un esempio:
type
PuntatoreAdIntero=^integer;
var
Puntatore:
PuntatoreAdIntero;
oppure si può banalmene scrivere
var
Puntatore:^integer;
Nel primo caso ho definito un tipo di variabile con nome
PuntatoreAdIntero che corrisponde a un puntatore ad integer, poi ho
dichiarato una variabile di nome Puntatore e del tipo appena
dichiarato PuntatoreAdIntero. Nel secondo caso ho dichiarato una
variabile di tipo puntatore ad integer. Quindi come si può dedurre
da i due modi di dichiarare un puntatore per dire che si tratta
effettivamente di un puntatore bisogna usare il simbolo ^ prima del
tipo della variabile da puntare.
Ora che abbiamo dichiarato il puntatore vediamo un po di
codice per capire meglio come utilizzare un puntatore.
{
Dichiaro il tipo di dato PuntatoreAdIntero }
type
PuntatoreAdIntero=^integer;
.
.
.
{
Dichiaro le variabili che mi servono }
var
MiaVariabile: integer;
MioPuntatore: PuntatoreAdIntero;
.
.
.
{
Codice vero e proprio che andremo ad analizzare }
MiaVariabile:=60; { Inizializzo la variabile }
MioPuntatore:=@MiaVariabile; { Il puntatore ora lo
punto alla variabile }
writeln('Il valore puntato è: ', MioPuntatore^); {
Stampo il valore puntato da puntatore }
MiaVariabile:=50;
writeln('Il valore puntato è: ', MioPuntatore^); {
Stampo il valore puntato da puntatore }
Per prima cosa inizializzo la variabile di nome
MiaVariabile a 60, dopodichè dico a MioPuntatore di puntare
all'indirizzo di MiaVariabile, dopodiché stampo a video il contenuto
della variabile puntata, il risultato sarà 60. In seconda battuta
modifico il contenuto di MiaVariabile e ristampo nuovamente il dato
contenuto nella variabile puntata, il risultato sarà 50.
I puntatori possono essere utilizzati su qualsiasi tipo
di variabile, anche sulle variabili realizzate da noi attraverso il
type.
Ad esempio se si realizzasse il tipo di dato animale in
questo modo
type
Animale=record
Anni:
integer;
Tipo:
string;
end;
sarebbe possibile dichiarare un puntatore a tale
variabile e le variabili Var1 e Var2 tramite questo codice
var
MioPuntatore:
^Animale;
Var1:
Animale;
Var2:
Animale;
Poi valorizzerei le due variabili
Var1.Anni:=5;
Var1.Tipo:='cane';
Var2.Anni:=6;
Var2.Tipo:='gatto';
E stamperei a video tramite il puntatore i dati delle
due variabili:
Una volta compilato ed eseguito questo programma il
risultato ottenuto sarà:
Ho un cane di anni: 5
Ho un gatto di anni: 6
Non bisogna lasciarsi trarre in inganno dagli esempi
visti fino ad ora, i puntatori sono molto utili e flessibili come
strumenti, soprattutto se si affrontano tematiche come liste ed
alberi.
About the author
xinyiman registered at Italian community of Lazarus and Free Pascal on Ottobre 14, 2011, 10:56:28 pm and has posted 3286 posts in the boards since then. Last visit was Oggi alle 09:13:59 am.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.