25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

7.2 Istruzioni di assegnazione di puntatori 365<br />

tutte e quattro le variabili avranno valore 3.14. Ciò significa che l’istruzione di assegnazione<br />

di puntatori ha lo stesso effetto della assegnazione delle variabili a cui essi puntano. In altre<br />

parole si sarebbe avuto lo stesso risultato se si fosse posto:<br />

y = x<br />

Se, invece, si fosse avuto:<br />

p2 => p1<br />

si sarebbe fatto in modo che sia p1 che p2 puntassero alla stessa variabile x mentre alla variabile<br />

y non sarebbe stato riferito alcun puntatore, con il risultato che p1, p2 e x avrebbero<br />

avuto valore 3.14 mentre y avrebbe mantenuto il valore 2.72. Questo esempio fa comprendere<br />

come ogni qualvolta un puntatore sia usato in una espressione al posto di un dato ”effettivo”,<br />

nell’espressione viene usato il valore del target a cui il puntatore è riferito. Questo processo è<br />

noto come dereferencing del puntatore: un puntatore, pertanto, è da riguardarsi semplicemente<br />

come un alias del suo target. Allo stesso modo, tutte le volte che un puntatore appare come un<br />

alias di un’altra variabile, esso subisce automaticamente il dereferencing ossia è il valore del suo<br />

target che viene usato al posto del puntatore stesso. Ovviamente, affinché ciò possa avvenire<br />

è necessario che il puntatore sia associato ad un target. I puntatori sono automaticamente<br />

deriferiti quando compaiono all’interno di una espressione o nelle istruzioni di I/O. <strong>Il</strong> seguente<br />

frammento di programma aiuterà meglio a comprendere il senso di quanto detto:<br />

REAL, TARGET :: a, b<br />

REAL, POINTER :: pt<br />

...<br />

pt => a<br />

b = pt ! pt è deriferito: b è posto uguale ad a<br />

IF (pt): è una forma di aliasing (ossia un modo di riferirsi ad uno<br />

stesso oggetto con nomi differenti), a mezzo della quale il puntatore ed il suo target sono<br />

riferiti ad una stessa locazione di memoria. Questo tipo di assegnazione può aver luogo<br />

tra una variabile puntatore ed una variabile target, oppure tra due variabili puntatore.<br />

• comune assegnazione (=): quando a sinistra dell’assegnazione c’è l’alias di un dato oggetto,<br />

l’operazione di assegnazione deve essere pensata applicata proprio all’oggetto puntato<br />

(ossia il valore specificato viene assegnato allo spazio puntato). Questo tipo di assegnazione<br />

può aver luogo tra una variabile puntatore ed un oggetto avente un appropriato<br />

tipo e rango; contrariamente a quanto avviene con l’assegnazione di puntatore, l’oggetto

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!