| ALLOCATABLE属性 |
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