25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

362 Puntatori<br />

in cui:<br />

tipo, POINTER [, attributi] :: nome_puntatore<br />

tipo, TARGET [, attributi] :: nome_target<br />

• tipo è il tipo di dati che può essere puntato, e può essere sia un tipo intrinseco che uno<br />

derivato.<br />

• attributi è una eventuale lista di attributi del puntatore o del target.<br />

E’ possibile, inoltre dichiarare variabili puntatore o target anche a mezzo delle istruzioni<br />

POINTER e TARGET:<br />

tipo [, attributi] [::] nome_puntatore<br />

tipo [, attributi] [::] nome_target<br />

POINTER :: nome_puntatore<br />

TARGET :: nome_puntatore<br />

Si noti che il tipo di un puntatore deve essere specificato anche se il puntatore stesso non ospita<br />

alcun dato di quel tipo: questa informazione serve solo ad indicare che il puntatore contiene<br />

l’indirizzo di una variabile di quel particolare tipo. Per quanto concerne, invece, la lista degli<br />

attributi, è bene precisare che:<br />

• L’attributo POINTER è incompatibile con gli attributi ALLOCATABLE, EXTERNAL, INTENT,<br />

INTRINSIC, PARAMETER e, ovviamente, TARGET.<br />

• L’attributo TARGET è incompatibile con gli attributi EXTERNAL, INTRINSIC, PARAMETER e,<br />

ovviamente, POINTER.<br />

Un puntatore deve avere lo stesso tipo e lo stesso rango del suo target. Un qualsiasi tentativo<br />

di puntare ad una variabile di tipo o rango diverso produce un errore di compilazione. Tuttavia,<br />

per puntatori ad array l’istruzione di dichiarazione deve specificare unicamente il rango ma non<br />

le dimensioni, in questo essendo del tutto simile ad un array allocabile: un array a puntatore<br />

è dichiarato, pertanto, con una specifica di deferred-shape array, ossia in fase di compilazione<br />

viene fornito solo il numero delle dimensioni, mentre l’ampiezza di ognuna di tali dimensioni<br />

viene sostituita dal simbolo di due punti. Due esempi di possibili puntatori ad array sono i<br />

seguenti:<br />

INTEGER, POINTER, DIMENSION(:) :: pt1<br />

REAL, POINTER, DIMENSION(:,:) :: pt2<br />

di cui il primo puntatore può puntare unicamente ad array monodimensionali di tipo intero, il<br />

secondo unicamente ad array bidimensionali di tipo reale.<br />

Le seguenti linee di codice rappresentano tre esempi di dichiarazione di puntatori e relativi<br />

target:

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

Saved successfully!

Ooh no, something went wrong!