POINTER (Fortran 90)

目的

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

ポインター という用語は Fortran 90 POINTER 属性を 持つオブジェクトを示します。 XL Fortran の以前のバージョンで POINTER ステートメントとして記述されていたものは、整数 POINTER ステートメントの項で詳しく説明します。 現バージョンでは、これらのポインターは整数ポインター といいます。

構文



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

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

規則

object_name はデータ・オブジェクトまたは関数結果を示します。 DIMENSION 属性を指定して有効範囲単位内以外で object_name を 宣言した場合、配列仕様は deferred_shape_spec_list でなければなりません。

object_name を整数 POINTERNAMELIST、 または EQUIVALENCE ステートメントに指定することはできません。 object_name が派生型定義のコンポーネントである場合、派生型で宣言された変数を EQUIVALENCE または NAMELIST ステートメントで指定することはできません。

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

+----------------------------------IBM 拡張----------------------------------+

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

+------------------------------End of IBM 拡張-------------------------------+

POINTER 属性を持つコンポーネントを含むオブジェクトはそれ自体、 TARGETINTENT、または 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 拡張-------------------------------+

関連情報

IBM Copyright 2003