ポインタが関係する通常の代入では,ポインタはその指示先の別名となっています。ポインタ代入では,ポインタは指示先に結合されます。指示先が不定または空状態である場合,ポインタは指示先と同じ状態になります。ポインタ代入文は次の形式を持ちます。
pointer-object => target
pointer-object
POINTER 属性で宣言された変数名または構造体成分。
target
変数または式。その型,種別パラメタ,および次元数は,pointer-object と同じでなくてはなりません。ベクトル添字を持つ部分配列であってはなりません。
規則と振る舞い
指示先が変数である場合,その変数が POINTER または TARGET 属性を持つか,親オブジェクトが TARGET 属性を持つ部分オブジェクトでなくてはなりません。
指示先が式である場合,その結果はポインタでなくてはなりません。
指示先がポインタでない場合 (TARGET 属性を持つ),ポインタ・オブジェクトが指示先に結合されます。
指示先がポインタである場合 (POINTER 属性を持つ),その状態がポインタ・オブジェクトの状態を次のように決定します。
ポインタが結合状態にある場合,ポインタ・オブジェクトは指示先と同じオブジェクトに結合されます。
ポインタが空状態にある場合,ポインタ・オブジェクトは空状態になります。
ポインタが不定状態の場合,ポインタ・オブジェクトは不定状態になります。
ポインタの引用または定義は,そのポインタが引用可能なまたは確定可能な指示先に結合されていない限り行えません。
ポインタ代入が行われると,それ以前のポインタ・オブジェクトと指示先の間の結合はすべて終了させられます。
ポインタは,構造型組込み代入文またはユーザー定義代入文の実行によっても,ポインタ構造体成分に代入することができます。
また,ポインタの結合は,ALLOCATE 文を使ってポインタを割り付けることで行うこともできます。
ポインタは,割付け解除,ポインタの空化 (DEALLOCATE または NULLIFY 文を使用),または NULL 組込み関数の引用によって空状態になります。
例
以下にポインタ代入の例を示します。
HOUR => MINUTES(1:60) ! 指示先は配列 M_YEAR => MY_CAR%YEAR ! 指示先は構造体成分 NEW_ROW%RIGHT => CURRENT_ROW ! ポインタ・オブジェクトは構造体成分 PTR => M ! 指示先は変数 POINTER_C => NULL () ! NULL 組込み関数の引用
次の例は,ポインタとしての指示先を示しています。
INTEGER, POINTER :: P, N INTEGER, TARGET :: M INTEGER S M = 14 N => M ! N に M を結合します P => N ! P に M から N を結合します S = P + 5
S に代入される値は 19 (14 + 5) です。
ポインタが指示先に結合されている場合や,2 つのポインタが同じ指示先に結合されている場合,組込み関数 ASSOCIATED を使って見つけ出すことができます。以下に例を示します。
REAL C (:), D(:), E(5) POINTER C, D TARGET E LOGICAL STATUS ! ポインタを代入します。 C => E ! ポインタを代入します。 D => E ! C が結合されていれば,TRUE を返します。 STATUS = ASSOCIATED (C) ! C が E に結合されていれば,TRUE を返します。 STATUS = ASSOCIATED (C, E) ! C と D が同じ指示先に結合されて ! いれば,TRUE を返します。 STATUS = ASSOCIATED (C, D)
関連情報
配列については,「配列」を参照してください。
ALLOCATE については,「ALLOCATE」を参照してください。
ASSOCIATED については,「ASSOCIATED」を参照してください。
DEALLOCATE については,「DEALLOCATE」を参照してください。
NULLIFY については,「NULLIFY」を参照してください。
NULL については,「NULL」を参照してください。
ポインタについては,「POINTER」を参照してください。
ユーザー定義代入については,「ユーザー定義代入」を参照してください。
構造型組込み代入については,「組込み代入」を参照してください。