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.

384 Puntatori<br />

INTEGER, POINTER :: ptr<br />

IF (a>b) THEN<br />

ptr => a<br />

ELSE<br />

ptr => b<br />

END IF<br />

END FUNCTION ptr<br />

7.10 Array di Puntatori<br />

Dal momento che un puntatore è solo un attributo e non un tipo di dati, non è possibile dichiarare<br />

direttamente un array di puntatori sicché, ad esempio, la seguente dichiarazione non è valida e<br />

provoca un errore di compilazione:<br />

REAL, DIMENSION(10), POINTER :: p<br />

Si può, tuttavia, aggirare l’ostacolo definendo un array di oggetti di tipo derivato aventi come<br />

componenti soltanto puntatori: infatti, sebbene in <strong>Fortran</strong> non sia lecito definire un array di<br />

puntatori, è, invece, perfettamente lecito definire un tipo di dati derivato contenente solo un<br />

puntatore e creare, quindi, un array di tale tipo. Si può in tal modo coniugare l’efficienza<br />

connessa all’uso dei puntatori con le capacità di ”sintesi” proprie degli array e degli oggetti di<br />

tipo derivato. <strong>Il</strong> programma seguente fornisce un esempio di quanto detto:<br />

PROGRAM array_di_punt<br />

IMPLICIT NONE<br />

INTEGER :: i<br />

TYPE :: punt_vet<br />

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

END TYPE punt_vet<br />

TYPE(punt_vet), DIMENSION(3) :: pt<br />

REAL, DIMENSION(5), TARGET :: a1=(/(i, i=1,5)/)<br />

REAL, DIMENSION(5), TARGET :: a2=(/(i, i=2,10,2)/)<br />

REAL, DIMENSION(5), TARGET :: a3=(/(i, i =-1,11,3)/)<br />

pt(1)%punt => a1<br />

pt(2)%punt => a2<br />

pt(3)%punt => a3<br />

WRITE(*,*) pt(3)%punt<br />

END PROGRAM<br />

Quando viene eseguito, il programma produce, come è ovvio, la stampa a video dell’array a3,<br />

sicché stamperà il record:<br />

-1 2 5 8 11<br />

Un esempio leggermente diverso potrebbe essere questo:

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

Saved successfully!

Ooh no, something went wrong!