形状引継ぎ配列は,結合された実引数配列の形状を取る仮引数配列です。形状引継ぎ指定は次の形式を取ります。
([dl]:[, [dl]:]...)
dl
次元の下限を示す宣言式。式の値は正,負,またはゼロです。必要ならば,値は整数型に変換されます。
下限値が指定されていない場合,値 1 が使用されます。
配列の次元数は,指定されているコロン (:) の数です。
上限値は,結合された実引数配列の対応する次元の寸法に下限値を加え,1 を引いた値です。
例
次に形状引継ぎ指定の例を示します。
INTERFACE SUBROUTINE SUB(M) INTEGER M(:, 1:, 5:) END SUBROUTINE END INTERFACE INTEGER L(20, 5:25, 10) CALL SUB(L) SUBROUTINE SUB(M) INTEGER M(:, 1:, 5:) END SUBROUTINE
配列 M は配列 L と同じ寸法を持ちますが,配列 M は境界を持っています (1:20,1:21,5:14)。
形状引継ぎまたはポインタ配列を期待するルーチンを呼び出すときには,明示的なインタフェースが必要であることに注意してください。
以下の例を考えます。
SUBROUTINE ASSUMED(A) REAL A(:, :, :)
配列 A は,コンマ (,) で区切られた 3 つのコロン (:) で示された 3 次元の配列です。しかしながら,各次元の寸法は指定されていません。サブルーチンが呼び出された時,A は渡される配列から形状を取ります。たとえば,以下の例を考えます。
REAL X (4, 7, 9) ... CALL ASSUMED(X)
これは,A に次元 (4, 7, 9) を与えています。実配列と形状引継ぎ配列は同じ次元を持たなければなりません。
以下の例を考えます。
SUBROUTINE ASSUMED(A) REAL A(3:, 0:, -2:) ...
前の例と同じ実配列 X(4, 7, 9) でこのサブルーチンが呼び出されると,A の上限と下限は以下のようになります。
A(3:6, 0:6, -2:6)