XL Fortran for AIX V8.1.1

ランゲージ・リファレンス


据え置き形状配列

据え置き形状配列とは、割り振り可能配列または配列ポインターのことで、境界をプログラムの実行中に定義または再定義できます。

Deferred_shape_spec_list
   .-,-.
   V   |
>>---:-+-------------------------------------------------------><
 
 

各次元のエクステント (ならびに関連する境界、形状、サイズの特性) は、配列が割り振られるか、ポインターが定義済みの配列に関連するまでは未定義です。 適切な照会機能に対する引き数としての場合を除いて、それ以前に配列のどの部分に関しても定義することや参照することはできません。 その時点で、配列ポインターは、ターゲット配列の特性と割り振り可能配列の特性が ALLOCATE ステートメントに指定されたと見なします。

ランクは、deferred_shape_spec_list 内のコロンの数です。

deferred_shape_spec_list は、 assumed_shape_spec_list と同様にみえるときもありますが、据え置き形状配列と想定形状配列は、同じものではありません。 据え置き形状配列は POINTER 属性または ALLOCATABLE 属性のいずれか 1 つを持っていなければなりませんが、想定形状配列は、 POINTER 属性を持たない仮引き数でなければなりません。 据え置き形状配列の境界およびそれに関連した実際のストレージは、配列を再割り振りしたり、ポインターを別の配列に関連させることによって変更できますが、想定形状配列の場合、これらの特性は対象となるサブプログラムの実行中には変更されません。

関連情報:

割り振り状況
ポインターの割り当て
ALLOCATABLE
ALLOCATED(ARRAY) または ALLOCATED(SCALAR)
ASSOCIATED (POINTER, TARGET)

割り振り可能配列

ALLOCATABLE 属性を持つ据え置き形状配列は、 割り振り可能配列 と呼ばれます。 ALLOCATE ステートメントによって、配列に対してストレージが割り振られたときに、その配列の境界と形状が決められます。

INTEGER, ALLOCATABLE, DIMENSION(:,:,:) :: A
ALLOCATE(A(10,-4:5,20)) ! Bounds of A are now defined (1:10,-4:5,1:20)
DEALLOCATE(A)
ALLOCATE(A(5,5,5))    ! Change the bounds of A



マイグレーションのためのヒント:

使用されるストレージの最小化:

FORTRAN 77 ソース

INTEGER A(1000),B(1000),C(1000)
C 1000 is the maximum size
WRITE (6,*) "Enter the size of the arrays:"
READ (5,*) N
   
  ·
  ·
  ·
DO I=1,N A(I)=B(I)+C(I) END DO END

Fortran 90 または Fortran 95 ソース

INTEGER, ALLOCATABLE, DIMENSION(:) :: A,B,C
WRITE (6,*) "Enter the size of the arrays:"
READ (5,*) N
ALLOCATE (A(N),B(N),C(N))
   
  ·
  ·
  ·
A=B+C END

関連情報:

割り振り状況

配列ポインター

POINTER 属性を持つ配列は、配列ポインターと呼ばれます。 ポインターの指定または ALLOCATE ステートメントの実行によって配列がターゲットと関連したときに、その配列の境界と形状が決められます。 このような配列は、タイプ宣言ステートメント、 POINTER、または DIMENSION ステートメントに指定することができます。

REAL, POINTER, DIMENSION(:,:) :: B
REAL, TARGET, DIMENSION(5,10) :: C, D(10:10)
B => C             ! Bounds of B are now defined (1:5,1:10)
B => D             ! B now has different bounds and is associated
                   !   with different storage
ALLOCATE(B(5,5))   ! Change bounds and storage association again
END


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]