Sun Studio 12 Update 1: Fortran ユーザーズガイド

4.3 Cray ポインタ

Cray ポインタとは、別のエンティティーのアドレスを値に持つ変数のことです。この別の言語要素のことを、「指示先」と呼びます。

f95 は、Cray ポインタをサポートしていますが、標準の Fortran 95 はサポートしていません。

4.3.1 構文

Cray ポインタの POINTER 文は次の形式で記述します。


POINTER  ( pointer_name, pointee_name [array_spec] ), …

pointer_namepointee_namearray_spec のそれぞれの意味は、次のとおりです。

pointer_name

対応する pointee_name へのポインタです。

pointer_name には pointee_name のアドレスが含まれます。pointer_name にはスカラー変数名を指定してください (派生型は指定できません)。禁止事項: 定数、構造体の名前、配列、または関数。

pointee_name

対応する pointer_name の指示先です。

制限事項 : 変数名、配列の宣言子、配列名を指定してください。

array_spec

array_spec を指定する場合は、明示的な実体があるもの (定数または非定数のサイズを持つもの)、または仮のサイズを持つものを指定してください。

例: 2 つの指示先に対して Cray ポインタを宣言できます。


    POINTER ( p, b ),  ( q, c )

前述の例では、Cray ポインタ p とその指示先 b、Cray ポインタ q とその指示先 c を宣言しています。

例: 配列に対して Cray ポインタを宣言することもできます。


     POINTER ( ix, x(n, 0:m) )

この例では、Cray ポインタ ix とその指示先 x を宣言しています。同時に、xn × m+1 次元の配列であることを宣言しています。

4.3.2 Cray ポインタの目的

ポインタを使用すると、記憶領域の特定の場所に変数を動的に対応付け、ユーザーが管理する記憶領域にアクセスすることができます。

Cray ポインタでは、メモリーの絶対アドレスにアクセスすることができます。

4.3.3 Cray ポインタと Fortran 95 のポインタ

Cray ポインタは次のように宣言します。

POINTER ( pointer_name, pointee_name [array_spec] )

Fortran 95 のポインタは次のように宣言します。

POINTER object_name

この 2 種類のポインタを混在させることはできません。

4.3.4 Cray ポインタの機能

4.3.5 Cray ポインタの制限事項

4.3.6 Cray ポインタの指示先の制限事項

4.3.7 Cray ポインタの使用法

Cray ポインタには次のようにして値を割り当てることができます。

例: Cray ポインタの使用例


    SUBROUTINE  sub ( n )
    COMMON pool(100000)
    INTEGER blk(128), word64
    REAL a(1000), b(n), c(100000-n-1000)
    POINTER ( pblk, blk ), (ia, a ), ( ib, b ), &
            ( ic, c ), ( address, word64 )
    DATA address / 64 /
    pblk = 0
    ia = LOC( pool )
    ib = ia + 4000
    ic = ib + n
    ...

前述の例を説明します。