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.

366 Puntatori<br />

il cui nome è sul lato destro dell’assegnazione non deve necessariamente avere l’attributo<br />

TARGET. Se una particolare locazione di memoria ospita una variabile che sia puntata da<br />

un certo numero di puntatori, allora il cambiamento del valore immagazzinato in questa<br />

locazione chiaramente andrà a modificare i valori deriferiti di tutti i puntatori associati a<br />

quella variabile.<br />

<strong>Il</strong> seguente frammento di codice implementa, ad esempio, tre istruzioni di assegnazione di<br />

puntatore ed una sola istruzione di assegnazione:<br />

REAL,TARGET,DIMENSION(3,3) :: b<br />

REAL,TARGET,DIMENSION(3) :: r, s<br />

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

REAL,POINTER,DIMENSION(:) :: x, y<br />

y => s ! Associazione di puntatore: nessuna assegnazione<br />

WRITE(*,*) s ! Primo WRITE: Stampa il valore originale di s<br />

a => b ! Associazione di puntatore: nessuna assegnazione<br />

x => r ! Associazione di puntatore: nessuna assegnazione<br />

y = MATMUL(a,x) ! Equivale all’istruzione di assegnazione s=MATMUL(a,x)<br />

WRITE(*,*) s ! Secondo WRITE: Adesso s è cambiato e si avra’ un<br />

! output differente rispetto a prima<br />

7.3 Stato di associazione di un puntatore<br />

Lo stato di associazione di un puntatore indica se il puntatore è attualmente associato o meno ad<br />

un target valido. I tre possibili stati di associazione di un puntatore sono: indefinito, associato<br />

e deassociato. Subito dopo la sua dichiarazione in una istruzione di dichiarazione di tipo, lo<br />

stato di associazione del puntatore è indefinito. Una volta che il puntatore sia stato associato<br />

ad un target a mezzo di una istruzione di assegnazione, il suo stato di associazione diventa<br />

associato. Se, successivamente, il puntatore viene deassociato dal suo target e non associato ad<br />

un nuovo target, il suo stato di associazione diventa deassociato.<br />

Un puntatore può essere deassociato dal suo target o a seguito di una nuova istruzione di<br />

assegnazione (a mezzo della quale esso risulta associato ad un nuovo target) oppure attraverso<br />

l’esecuzione dell’istruzione NULLIFY. Quest’ultima ha la seguente forma:<br />

NULLIFY (puntatore1 [, puntatore2, ...])<br />

A seguito di tale istruzione, tutti i puntatori presenti nella lista degli argomenti risulteranno<br />

deassociati dai loro rispettivi target.<br />

Lo stato di associazione di un puntatore può essere conosciuto a mezzo della funzione<br />

intrinseca ASSOCIATED la cui espressione generale è la seguente:<br />

ASSOCIATED(puntatore [, target])<br />

<strong>Il</strong> valore ritornato da questa funzione può essere .TRUE. o .FALSE. Quando il riferimento<br />

opzionale a target è assente, ASSOCIATED ritorna il valore .TRUE. se il puntatore è associato

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

Saved successfully!

Ooh no, something went wrong!