POINTER (Fortran 90)

目的

POINTER 属性によって、オブジェクトをポインター変数として指定します。

ポインター という用語は、Fortran 90 POINTER 属性を持つオブジェクトを参照します。整数 POINTER ステートメントは、XL Fortran の前のバージョンで POINTER ステートメントとして文書化されたものに関して詳細を提供します。これらのポインターは、現在、整数ポインター として参照されます。

構文

構文図を読む構文図をスキップする
>>-POINTER--+----+---------------------------------------------->
            '-::-'   

   .-,-----------------------------------------------.   
   V                                                 |   
>----object_name--+--------------------------------+-+---------><
                  '-(--deferred_shape_spec_list--)-'     

deferred_shape_spec
コロン (:) です。各コロンは次元を表します。

規則

object_name はデータ・オブジェクトまたは関数結果を参照します。object_name が、有効範囲単位内のどこかで DIMENSION 属性を使用して宣言された場合、配列仕様は、deferred_shape_spec_list にする必要があります。

object_name は、整数 POINTERNAMELIST または EQUIVALENCE ステートメントに指定しないでください。object_name が派生型定義のコンポーネントの場合、型で宣言されたいずれの変数も、EQUIVALENCE または NAMELIST ステートメントで指定できません。

ポインター変数は、共通ブロック単位およびブロック・データ・プログラム単位に指定できます。

Fortran 90 ポインターがスレッド固有であることを確かにするには、ポインターに SAVE または STATIC 属性を指定しないでください。これらの属性は、ユーザーによって明示的に指定されるか、-qsave コンパイラー・オプションを使用して暗黙的に指定されます。ただし、ターゲットが静的であるポインター代入ステートメントで非静的ポインターが使用される場合、ポインターに対する参照はすべて、実際には静的な共有ターゲットを参照します。

POINTER 属性を持つコンポーネントを含むオブジェクトは、データ転送ステートメントに指定できませんが、そのオブジェクト自体が、TARGETINTENT、または ALLOCATABLE 属性を持つことができます。

TS 29113 の始まりPOINTER 属性は、想定ランク・エンティティーに対して指定できます。TS 29113 の終わり

表 1. POINTER 属性と互換性のある属性
AUTOMATIC  3  INTENT PUBLIC
ASYNCHRONOUS OPTIONAL SAVE
CONTIGUOUS  2  PRIVATE STATIC  3 
DIMENSION PROTECTED  1  VOLATILE
注:
  •  1  Fortran 2003
  •  2  Fortran 2008
  •  3  IBM 拡張

これらの属性は、ポインター自体に対してのみ適用され、関連ターゲットには適用されません。例外は、DIMENSION 属性で、これは関連ターゲットに適用されます。

例 1:
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
例 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