明示的形状配列とは、境界が各次元で明示的に指定されている配列のことです。
Explicit_shape_spec_list |
---|
.-,-------------------------------. V | >>---+----------------+--upper_bound-+------------------------->< '-lower_bound--:-' |
どの境界も定数ではない場合、その配列はサブプログラム内で宣言してください。 定数以外の境界はサブプログラムへの入り口で決められます。 下限が省略されると、そのデフォルト値は 1 となります。
ランクは、指定された上限の数です。 明示的形状仮引き数の形状は、対応する実引き数の形状と異なる場合があります。
サイズは、指定された境界によって決められます。
INTEGER A,B,C(1:10,-5:5) ! All bounds are constant A=8; B=3 CALL SUB1(A,B,C) END SUBROUTINE SUB1(X,Y,Z) INTEGER X,Y,Z(X,Y) ! Some bounds are not constant END SUBROUTINE
自動割り付け配列は、サブプログラムで宣言される明示的形状配列で、仮引き数やポインティング先配列では ありません。 自動割り付け配列は、定数以外の宣言式である 1 つ以上の境界を持ちます。 境界は、サブプログラムの入り口で計算され、サブプログラムの実行時は変更されません。
INTEGER X COMMON X X = 10 CALL SUB1(5) END SUBROUTINE SUB1(Y) INTEGER X COMMON X INTEGER Y REAL Z (X:20, 1:Y) ! Automatic array. Here the bounds are made ! available through dummy arguments and common ! blocks, although Z itself is not a dummy END SUBROUTINE ! argument.
関連情報:
調整可能 配列とは、1 つ以上の定数以外の境界を持つ明示的形状配列の仮引き数です。
SUBROUTINE SUB1(X, Y) INTEGER X, Y(X*3) ! Adjustable array. Here the bounds depend on a ! dummy argument, and the array name is also passed in. END SUBROUTINE
+----------------------------------IBM 拡張----------------------------------+
pointee 配列 は、整数 POINTER ステートメントで 宣言される必要のある明示的形状配列または想定サイズ配列です。
配列がサブプログラム内で宣言されている場合、ポインティング先配列の宣言子には、変数のみを入れることが できます。 また、その変数は、仮引き数、共通ブロックのメンバー、使用またはホストに関連していなければなりません。 境界は、サブプログラムの入り口で計算され、サブプログラムの実行時は一定の状態に保たれます。
「XL Fortran ユーザーズ・ガイド」に説明されているように、-qddim コンパイラー・オプションを 使用すると、変数を配列宣言子内にのみ入れることができるという制限が解除され、メインプログラム内の 宣言子に変数名を入れることができるようになります。 また、配列が参照されるたびに、指定された定数以外の境界がすべて再評価されるため、境界式で使用される 変数の値を単に変更するだけでポインティング先配列の特性を変更できます。
@PROCESS DDIM INTEGER PTE, N, ARRAY(10) POINTER (P, PTE(N)) N = 5 P = LOC(ARRAY(2)) ! PRINT *, PTE ! Print elements 2 through 6 of ARRAY N = 7 ! Increase the size PRINT *, PTE ! Print elements 2 through 8 of ARRAY END
関連情報:
+------------------------------End of IBM 拡張-------------------------------+