文:変数とポインタの組を確立します。各ポインタは対応する変数のアドレスを含んでいます。これは,Fortran 95/90 POINTER 文とは異なります。
形式
POINTER (pointer, pointee) [, (pointer, pointee)] . . .
pointer
pointee のアドレスとして使用される値を持つ変数
pointee
変数。配列名または配列宣言を使用することができます。
規則と振る舞い
以下に,pointer の規則と振る舞いを説明します。
2 つの pointer が同じ値を持つことができます。つまり,pointer の別名化が可能です。
直接に使用された場合,pointer は整数変数のように扱われます。ia32 システムでは,pointer は 1 つの数値記憶単位を占有するので,32 ビットです (INTEGER(4))。Alpha および ia64 システムでは,pointer は 2 つの数値記憶単位を占有するので,64 ビットのです (INTEGER(8))。
pointer は pointee になることはできません。
pointer は ASSIGN 文の中で使用することはできず,以下の属性を持つことはできません。
ALLOCATABLE | INTRINSIC | POINTER |
EXTERNAL | PARAMETER | TARGET |
pointer は,DATA 文の中では,整数表現との組み合わせでのみ使用することができます。
整数を pointer に変換することが可能なので,絶対メモリー位置を指すことができます。
pointer 変数を,他のデータ型を持つように宣言することはできません。
pointer は関数戻り値にはなれません。
以下の方法で,pointer に値を与えることができます。
LOC 組込み関数 (または %LOC ビルトイン関数) を使ってアドレスを取得します。
MALLOC 組込み関数 (または,Tru64 UNIX あるいは Linux システムでは malloc(3f),OpenVMS システムでは LIB$GET_VM) を使用して,オブジェクトの記憶列を割り付けます。
例 %LOC を使用 MALLOC を使用 INTEGER I(10) INTEGER I(10) INTEGER I1(10) /10*10/ POINTER (P,I) POINTER (P,I) P = MALLOC(40) P = %LOC(I1) I(2) = I(2) + 1 I(2) = I(2) + 1
pointer 内の値は,pointee の基底アドレスとして使用されます。
以下に,pointee の規則と振る舞いを説明します。
pointee には記憶列は割り付けられません。pointee を引用すると,結合された pointer の現在の内容が調べられ,それが pointee の基底アドレスとして使用されます。
pointee は,データ初期化を行うことはできず,データ初期化された欄を含んでいる記録構造体を持つことはできません。
1 つの pointee は 1 つの (Compaq Fortran) POINTER 文にしか置けません。
pointee 配列は,固定次元,整合次元,または引継ぎ次元を持つことができます。
ALLOCATABLE | OPTIONAL | SAVE |
AUTOMATIC | PARAMETER | STATIC |
INTENT | POINTER | TARGET |
pointee は以下のものにはなれません。
仮引数
関数戻り値
記録欄または配列要素
ゼロの大きさ
自動割付けデータ・オブジェクト
総称インタフェース宣言の名前
pointee は構造型である場合,連続型でなくてはなりません。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
例
POINTER (p, k) INTEGER j(2) ! これは j(1) = 0, j(2) = 5 と同じ効果を持ちます。 p = LOC(j) k = 0 p = p + SIZEOF(k) ! 4 バイト整数のための 4 k = 5