XL Fortran for AIX V8.1.1

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


明示的形状配列

明示的形状配列とは、境界が各次元で明示的に指定されている配列のことです。

Explicit_shape_spec_list
   .-,-------------------------------.
   V                                 |
>>---+----------------+--upper_bound-+-------------------------><
     '-lower_bound--:-'
 
 

lower_bound、upper_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 拡張----------------------------------+

ポインティング先配列

ポインティング先配列 は、整数 POINTER ステートメントまたはその他の仕様ステートメント内で宣言される明示的形状配列または想定サイズ配列です。

配列がサブプログラム内で宣言されている場合、ポインティング先配列の宣言子には、変数のみを入れることができます。また、その変数は、仮引き数、共通ブロックのメンバー、使用またはホストに関連していなければなりません。 次元のサイズはサブプログラムの入り口で計算され、サブプログラムの実行中は一定の状態に保たれます。

ユーザーズ・ガイド」に説明されているように、-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

関連情報:

POINTER (整数)

+--------------------------------IBM 拡張の終り-------------------------------+


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