関連情報
ナビゲーション:Fortran 2003入門   前へ   上へ   次へ

4.4 ポインタの機能強化

4.4.1 ポインタのINTENT

POINTER仮引数はINTENT属性を持つことができるようになりました。 この属性はポインタ結合状態に対してのものでポインタの指示先のものではありません。

INTENT(IN)ポインタに代入は行えますが、ポインタ代入、ヌル化、割付け、 解放は行えません。 INTENT(OUT)ポインタは手続きの入口において未定義結合状態です。 INTENT(INOUT)ポインタは使用に関して制限がありませんが、 実引数は(ポインタ関数の参照ではなく)ポインタ変数である必要があります。

4.4.2 ポインタ上下限指定

ポインタの上下限はポインタ代入において左辺に指定することで、 デフォルト値からの変更が可能です。
例:
  REAL,TARGET :: x(-100:100,-10:10)
  REAL,POINTER :: p(:,:)
  p(1:,1:) => x
上限値は下限値に寸法から1を引いた数を足すことによって得ることができます。 従って上の例ではPの上下限は1:201,1:21となります。 ポインタ代入において任意の次元数の下限値を設定する場合、 値は明示的に指定されなくてはならず (配列の宣言のときとは異なり1というデフォルト値があるわけではありません)、 またこれをポインタのすべての次元に対して指定する必要がある点に注意してください。

4.4.3 次元再割当ポインタ代入

この機能は多次元ポインタが1次元オブジェクトを指し示すことを可能にします。
例:
  REAL,POINTER :: diagonal(:),matrix(:,:),base(:)
  ...
  ALLOCATE(base(n*n))
  matrix(1:n,1:n) => base
  diagonal => base(::n+1)
  !
  ! DIAGONAL now points to the diagonal elements of MATRIX.
  !

次元再割当に際して、下限値と上限値双方の値は全ての次元に対して明示的に指定されなくてはならない点に注意してください。 デフォルト値はありません。

Results matter. Trust NAG.
Privacy Policy | Trademarks