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.

318 Array Processing<br />

6.5 Array allocabili<br />

Nel paragrafo precedente si è visto come gli array automatici possano fornire una soluzione<br />

al problema della creazione di array temporanei le cui dimensioni possano essere determinate<br />

soltanto durante l’esecuzione del programma. Una soluzione più ”completa” è fornita, però, dagli<br />

allocatable array. Questi ultimi sono più flessibili degli array automatici poiché le operazioni<br />

di allocazione e di deallocazione dei loro elementi avvengono sotto il completo controllo del<br />

programmatore (per gli array automatici, invece, lo spazio in memoria è sempre allocato all’atto<br />

della chiamata di procedura, ed è sempre rilasciato all’uscita dalla procedura).<br />

L’uso degli array allocabili consiste, generalmente, di tre fasi:<br />

1. L’array allocabile è specificato in una istruzione di dichiarazione di tipo.<br />

2. Lo spazio in memoria è dinamicamente allocato per i suoi elementi in una istruzione di<br />

allocazione separata, dopodiché l’array può essere normalmente usato.<br />

3. Quando l’array non è più necessario, lo spazio per i suoi elementi viene rilasciato attraverso<br />

una speciale istruzione di deallocazione.<br />

Una volta che per esso sia stato allocato dello spazio in memoria, un array allocabile può essere<br />

utilizzato come un comune array: i suoi elementi possono essere assegnati e riferiti, o anche<br />

passati come parametri attuali in istruzioni di chiamata di procedura. Inoltre un array allocabile<br />

non può essere dichiarato come parametro formale di una procedura.<br />

Un allocatable array è dichiarato in una istruzione di dichiarazione di tipo che includa un<br />

attributo ALLOCATABLE. Tuttavia, dal momento che le sue dimensioni non sono note all’atto<br />

della dichiarazione, il limite di ciascuno dei suoi indici va sostituito con il simbolo dei due<br />

punti:<br />

tipo, ALLOCATABLE, DIMENSION(: [, :, ...]) :: nome_array<br />

(il rango, chiaramente, è noto dal numero di ricorrenze del simbolo dei due punti).<br />

Si noti come l’istruzione di dichiarazione di tipo per un array allocabile sia molto simile<br />

a quella di un array fittizio di forma presunta. Tuttavia, l’analogia è soltanto formale poiché<br />

mentre un assumed-shape array deve essere un parametro formale di una procedura e non può<br />

essere dichiarato con l’attributo ALLOCATABLE, l’esatto contrario vale per un allocatable array.<br />

Così come per altri attributi, anche l’attributo ALLOCATABLE può essere sostituito da una<br />

istruzione ALLOCATABLE separata:<br />

tipo :: nome_array<br />

ALLOCATABLE :: nome_array(: [, :, ...])<br />

E’ sempre preferibile, tuttavia, dichiarare un array allocabile con l’attributo ALLOCATABLE piuttosto<br />

che a mezzo dell’istruzione ALLOCATE per ragioni di chiarezza e concisione: è sempre<br />

opportuno fare in modo, quando possibile, che tutte le informazioni circa una stessa entità<br />

siano contenute in un’unica istruzione.

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

Saved successfully!

Ooh no, something went wrong!