POINTER (Fortran 90)
目的
POINTER 属性によって、オブジェクトをポインター変数として指定します。
ポインター という用語は、Fortran 90 POINTER 属性を持つオブジェクトを参照します。整数 POINTER ステートメントは、XL Fortran の前のバージョンで POINTER ステートメントとして文書化されたものに関して詳細を提供します。これらのポインターは、現在、整数ポインター として参照されます。
構文
規則
object_name はデータ・オブジェクトまたは関数結果を参照します。object_name が、有効範囲単位内のどこかで DIMENSION 属性を使用して宣言された場合、配列仕様は、deferred_shape_spec_list にする必要があります。
object_name は、整数 POINTER、NAMELIST または EQUIVALENCE ステートメントに指定しないでください。object_name が派生型定義のコンポーネントの場合、型で宣言されたいずれの変数も、EQUIVALENCE または NAMELIST ステートメントで指定できません。
ポインター変数は、共通ブロック単位およびブロック・データ・プログラム単位に指定できます。
Fortran 90 ポインターがスレッド固有であることを確かにするには、ポインターに SAVE または STATIC 属性を指定しないでください。これらの属性は、ユーザーによって明示的に指定されるか、-qsave コンパイラー・オプションを使用して暗黙的に指定されます。ただし、ターゲットが静的であるポインター代入ステートメントで非静的ポインターが使用される場合、ポインターに対する参照はすべて、実際には静的な共有ターゲットを参照します。
POINTER 属性を持つコンポーネントを含むオブジェクトは、データ転送ステートメントに指定できませんが、そのオブジェクト自体が、TARGET、INTENT、または ALLOCATABLE 属性を持つことができます。
POINTER 属性は、想定ランク・エンティティーに対して指定できます。
AUTOMATIC 3 | INTENT | PUBLIC |
ASYNCHRONOUS | OPTIONAL | SAVE |
CONTIGUOUS 2 | PRIVATE | STATIC 3 |
DIMENSION | PROTECTED 1 | VOLATILE |
注:
|
これらの属性は、ポインター自体に対してのみ適用され、関連ターゲットには適用されません。例外は、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
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