目的
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 または NAMELIST ステートメントで指定することはできません。
ポインター変数は、共通ブロックおよび ブロック・データ・プログラム単位に指定することができます。
+----------------------------------IBM 拡張----------------------------------+
Fortran 90 ポインターを確実にスレッド固有のものとするためには、そのポインターに SAVE または STATIC 属性を指定しないでください。これらの属性は、ユーザーによって明示的に指定されるか、 または -qsave コンパイラー・オプションを 使用することにより暗黙的に指定されます。 ただし、静的でないポインターが、ターゲットが静的であるポインター代入ステートメント内で使用される場合、 ポインターへのすべての参照は、実際は静的な共用ターゲットへの参照になることに注意してください。
+------------------------------End of 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
+------------------------------End of IBM 拡張-------------------------------+
関連情報