目的
POINTER 属性はオブジェクトをポインター変数として指定します。
ポインター という用語は Fortran 90 POINTER 属性を持つオブジェクトを示します。 XL Fortran の以前のバージョンで POINTER ステートメントとして記述されていたものは、整数 POINTER ステートメントの項で詳しく説明します。現バージョンでは、これらのポインターは整数ポインター といいます。
構文
>>-POINTER--+----+----------------------------------------------> '-::-' .-,-----------------------------------------------. V | >----object_name--+--------------------------------+-+--------->< '-(--deferred_shape_spec_list--)-' |
規則
object_name はデータ・オブジェクトまたは関数結果を示します。 DIMENSION 属性を指定して有効範囲単位内以外で object_name を宣言した場合、配列仕様は deferred_shape_spec_list でなければなりません。
object_name を整数 POINTER、NAMELIST、または EQUIVALENCE ステートメントに指定することはできません。 object_name が派生型定義のコンポーネントである場合、派生型で宣言された変数を EQUIVALENCE、DATA、または NAMELIST ステートメントで指定することはできません。
ポインター変数は、共通ブロックおよびブロック・データ・プログラム単位に指定することができます。
+----------------------------------IBM 拡張----------------------------------+
Fortran 90 ポインターを確実にスレッド固有のものとするためには、そのポインターに SAVE または STATIC 属性を指定しないでください。 これらの属性は、ユーザーによって明示的に指定されるか、または -qsave コンパイラー・オプションを使用することにより暗黙的に指定されます。ただし、静的でないポインターが、ターゲットが静的であるポインター代入ステートメント内で使用される場合、ポインターへのすべての参照は、実際は静的な共用ターゲットへの参照になることに注意してください。
+--------------------------------IBM 拡張の終り-------------------------------+
POINTER 属性を持つコンポーネントを含むオブジェクトはそれ自体、 TARGET、INTENT、または ALLOCATABLE 属性を持つことができます。ただし、これをデータ転送ステートメントに指定することはできません。
POINTER 属性と互換性のある属性 | ||||
---|---|---|---|---|
|
これらの属性はポインターに対してだけ有効であり、関連するターゲットに対しては有効ではありません。ただし、DIMENSION 属性だけは関連するターゲットに対して有効になります。
例
例:
INTEGER, POINTER :: PTR(:) INTEGER, TARGET :: TARG(5) PTR => TARG ! PTR is associated with TARG and is ! assigned an array specification of (5) PTR(1) = 5 ! TARG(1) has value of 5 PRINT *, FUNC() CONTAINS REAL FUNCTION FUNC() POINTER :: FUNC ! Function result is a pointer
·
·
·
END FUNCTION END
+----------------------------------IBM 拡張----------------------------------+
例 2: Fortran 90 ポインターとスレッド・セーフ
FUNCTION MYFUNC(ARG) ! MYPTR is thread-specific. INTEGER, POINTER :: MYPTR ! every thread that invokes ! 'MYFUNC' will allocate a ALLOCATE(MYPTR) ! new piece of storage that MYPTR = ARG ! is only accessible within
·
·
·
! that thread. ANYVAR = MYPTR END FUNCTION
+--------------------------------IBM 拡張の終り-------------------------------+
関連情報