ALLOCATABLE属性 |
[例] |
INTEGER,DIMENSION(:),ALLOCATABLE ::a READ(*,*) n ALLOCATE(a(n))
型指定子,DIMENSION(:),ALLOCATABLE :: 配列名,… ALLOCATE(配列名(配列の大きさ),…) DEALLOCATE(配列名,…) |
[例] |
INTEGER,DIMENSION(:,:),ALLOCATABLE :: a INTEGER :: m,n READ(*,*) m,n ALLOCATE(a(m,n)) : DEALLOCATE(a)
ALLOCATE(ポインタ,…) |
[例] |
(1) list構造をもつ領域を確保する。 (2) rootは確保された領域の先頭のアドレスを指す。TYPE list INTEGER :: num TYPE(list),POINTER :: next END TYPE list TYPE(list),POINTER :: root,prt ALLOCATE(root)
[例1] |
PROGRAM sample1
INTEGER,DIMENSION(10),TARGET :: array
INTEGER,DIMENSION(:),POINTER :: window
INTEGER :: n,m
array=(/1,2,3,4,5,6,7,8,9,10/)
n=2; m=5
window=>array(n:m) !窓の作成
WRITE(*,*) window !2 3 4 5が出力される
n=3; m=9
window=>array(n:m) !窓の作成
WRITE(*,*) window !3 4 5 6 7 8 9が出力される
END PROGRAM sample1
[例2] |
PROGRAM sample2
INTEGER,DIMENSION(5,6),TARGET :: array
INTEGER,DIMENSION(:,:),POINTER :: window
INTEGER :: i,j
DO i=1,5
DO j=1,6
array(i,j)=i*10+j
END DO
END DO
window=>array(2:3,2:4) !窓の作成
DO i=1,2
WRITE(*,*) window(i,:) ! 22 23 24
END DO ! 32 33 34 の出力
END PROGRAM sample2