2017-11-30 3 views
1

小さい次元の配列へのポインタを作成したいと思います。 たとえば、私は配列arr(1:2, 1:10, 1:10)を持っています。Fortran小さな次元配列へのポインタ

今、私はarr(1:1, 1:10, 1:10)へのポインタを作成したいと思いますが、最初に削除したいのですが、インデックスのように名前を付ける方法がわかりませんし、2番目のポインタ(2:2、1:10、1: 10)。

2次元(行列)の配列を関数に送信したいので必要です。

ここでは、擬似コードを使って何をしたいのかを示します。

INTEGER, DIMENSION (1:2, 1:10, 1:10), TARGET :: BOUNDRIES 
INTEGER, DIMENSION (:,:), POINTER : LEFT_BOUNDRY 

LEFT_BOUNDRY => BOUNDRIES(1,1:10,1:10) 
DO i = 1,n 
    DO j = 1,10 
    write(*,*) LEFT_BOUNDRY(i,j) 
    END DO 
END DO 

できますか?我々は関数でダミー引数またはサブルーチン(集合的に、手順)を有する場合

+1

あなたの説明から、必ずしもポインタが必要なわけではありません。関数に 'arr(2、:、:) :)を渡すだけでしょうか?それについてアドバイスするためには、関数のインターフェイスを表示する必要があります。 – francescalus

+0

私が使用したい機能はhttps://ww2.odu.edu/~agodunov/computing/programs/book2/Ch06/Inverse.f90です。私はそれを編集することができますが、私はそれをしたくありません私はそれが可能であることを知らない。 – Micchaleq

+0

そのリンクには1つのポインタはありません。どのような機能を念頭に置いていますか?ヘッダ(引数リスト+引数の宣言)をあなたの質問にコピーできますか? –

答えて

1

我々は、そのプロシージャを実行対応引数を有します。サブルーチンsを考える:

subroutine s(x) 
    real x(5,2) 
    ... 
end subroutine s 

仮引数xは、この場合、ランク2の明示的形状配列、形状[5,2]です。

我々は

yは、我々がランク2であり、 [5,2]を形作る y配列全体を用意する必要はありませんいくつかの realものです
call s(y) 

にしたい場合。 yには少なくとも10個の要素があり、という名前のものは、サブルーチン内にあるときにxにこれらの10個の要素をマップします。xにマップします。

は(最後のケースでは、それは仮引数に関連付けられているになるだけで最初の10の要素です)

real y1(10), y2(1,10), y3(29) 
call s(y1) 
call s(y2) 
call s(y3) 

そして、これらの作品のそれぞれを想像してみてください。

重要なことは、という要素シーケンスがあり、これはxに関連付ける要素を選択するときに重要です。検討する

real y(5,12,10,10) 
call s (y(1,1,1:2,3:7)) 

これは10要素のyの配列セクションです。これらの10個の要素は、一緒になってsxになります。

arr(2,1:10,1:10)(実際にはランク2の配列セクションです)を、要素100個以下の明示的なシェイプ配列であるランク2の引数に渡したい場合は、すべて正常です。

関連する問題