XL Fortran for AIX V8.1.1

ランゲージ・リファレンス

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 が派生型定義のコンポーネントである場合、派生型で宣言された変数を EQUIVALENCEDATA、または NAMELIST ステートメントで指定することはできません。

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

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

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

+--------------------------------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

+--------------------------------IBM 拡張の終り-------------------------------+

関連情報


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]