Datenstrukturen

Definition eigener Typen ("Records", "Structuren")

! Definition des Typs Person
TYPE Person
   CHARACTER(LEN=20)  :: name
   INTEGER            :: age
   REAL               :: height
END TYPE Person

! Definition von Variablen des Typs Person
TYPE(Person)  :: peter, mr_president

! Initialisierung einer Struktur
mr_president = Person('Hauke', 53, 1.78)

! Zugriff auf die Komponenten
peter%age = peter%age + 1

Pointer

! Definition von Pointern
REAL(KIND=long), DIMENSION(:,:), POINTER ::  pa, pb

! Ziele von Pointern muessen gekennzeichnet werden
REAL(KIND=long), DIMENSION(10, 10), TARGET :: a

! Pointern koennen Ziele zugewiesen werden
pa => a
pa(5,5) = 314.59          ! aendert den Wert von a(5,5)

! oder sie bekommen dynamisch Speicher
ALLOCATE(pb(5, 7))
pb(2,3) = pa(3,2)
DEALLOCATE(pb)        ! und weg damit - aber vorsichtig

Beispiel: Linked List

! Definition
TYPE List_Entry
   INTEGER                   :: value
   TYPE(List_Entry), POINTER :: next
END TYPE List_Entry
       
TYPE(List_Entry), POINTER   :: first, current

! Anfang und ein weiteres Element vorschalten
ALLOCATE(first)
first = List_Entry(17, NULL())       ! NULL() erst in Fortran 95
ALLOCATE(current)
current = List_Entry(19, first)      ! current%next => first
first   => current