POINTER (integer) (IBM 拡張)

目的

整数 POINTER ステートメントによって、変数 int_pointer の値を、ポインティング先 への参照用アドレスとして使用することを指定します。

Fortran 90 POINTER ステートメントと区別するために、このステートメントの名前は、POINTER から整数 POINTER に変更されました。

構文

構文図を読む構文図をスキップする
            .-,-----------------------------.   
            V                               |   
>>-POINTER----(--int_pointer--,--pointee--)-+------------------><

int_pointer
整数ポインター変数の名前です。
pointee
変数名または配列宣言子です。

規則

コンパイラーは、ポインティング先にストレージを割り振りません。ストレージは、ポインターへのストレージのブロックのアドレスの割り当てによって、実行時にポインティング先と関連付けられます。ポインティング先は、静的ストレージまたは動的ストレージのいずれかと関連付けることができます。ポインティング先の参照には、関連付けられるポインターが定義されていることが必要です。

整数ポインターは、型を明示的に代入することができない 32 ビット・モードの INTEGER(4)、および 64 ビット・モードの INTEGER(8) 型のスカラー変数です。整数ポインターと同じ型の変数が使用できる式またはステートメントで、整数ポインターを使用できます。ポインティング先には、すべてのデータ型を代入することができます。ただし、ポインティング先への記憶クラスまたは初期値は代入することができません。

整数 POINTER ステートメントにポインティング先として指定される実配列を、ポインティング先配列と呼びます。型宣言ステートメント、DIMENSION ステートメント、または整数 POINTER ステートメントそれ自体に、ポインティング先配列の次元を指定できます。

-qddim コンパイラー・オプションを指定した場合、メインプログラムに現れるポインティング先配列は、調整可能な配列仕様を持つこともできます。 メインプログラムとサブプログラムで、次元サイズは、ポインティング先が参照される際に評価されます (動的次元設定)。

-qddim コンパイラー・オプションを指定しない場合、サブプログラムに現れるポインティング先配列は、調整可能な配列仕様を持つことができ、次元サイズは、ポインティング先が評価される時ではなく、サブプログラムへの入口で評価されます。

以下の制約が、ポインティング先と整数ポインターの定義と使用に適用されます。
  • ポインティング先は、サイズをゼロにできません。
  • ポインティング先は、スカラー、想定済みサイズ配列、または明示的形状配列にできます。
  • ポインティング先は、COMMONDATANAMELIST、または EQUIVALENCE ステートメントには指定できません。
  • ポインティング先は、以下の属性を持つことができません。EXTERNALALLOCATABLEPOINTERTARGETINTRINSICINTENTOPTIONALSAVESTATICAUTOMATIC、または PARAMETER
  • ポインティング先は、仮引数にすることはできません。そのため、FUNCTIONSUBROUTINE、または ENTRY ステートメントに指定することはできません。
  • ポインティング先は、定数以外の範囲または長さを持つことはできますが、自動オブジェクトにすることはできません。
  • ポインティング先は、一般インターフェース・ブロック名にすることはできません。
  • 派生型から成っているポインティング先は、順序派生型にする必要があります。
  • 関数値は、ポインティング先にすることはできません。
  • 整数ポインターは、別のポインターによって指示することはできません。(ポインターは、ポインティング先にすることはできません。)
  • 整数ポインターは、以下の属性を持つことはできません。
  • 整数ポインターを、NAMELIST グループ名として指定できません。
  • 整数ポインターを、プロシージャーにすることはできません。

     INTEGER A,B
     POINTER (P,I)
     IF (A<>0) THEN
       P=LOC(A)
     ELSE
       P=LOC(B)
     ENDIF
     I=0         ! Assigns 0 to either A or B, depending on A's value
     END

関連情報