5

関連ブロックの配列境界を次のように保持したいと思います。

integer a(2:4,2)
associate (b => a(:,1))
    print *, lbound(b), ubound(b)
end associate

bis2との境界を期待しますが、4実際にはとです。これを行う方法?前もって感謝します!13

4

3 に答える 3

4

サブアレイに関連付けています。その境界は常に1から始まります。試してください

 print *, lbound(a(:,1),1)

AFAIKでは、ポインタの再マッピングのトリックを構成で使用することはできませんassociate。具体的には、「セレクターが配列の場合、関連付けエンティティは、各次元の下限が固有のLBOUND(セレクター)の値に等しい配列です。

ただし、もちろんポインタを使用することもできます

integer,target :: a(2:4,2)

integer,pointer :: c(:)


associate (b => a(:,1))
    print *, lbound(b), ubound(b)
end associate

c(2:4) => a(:,1)
print *, lbound(c), ubound(c)

end
于 2012-11-27T07:56:29.250 に答える
0

配列の境界を保持するためのより洗練された方法は、次のことを行うことだと思います。

integer,target  :: a(2:4,2)
integer,pointer :: b(:)

b(lbound(a,1):) => a(:,1)
于 2014-06-03T07:47:01.277 に答える
0

これは、@VladimirFの回答を単純に拡張したものです。ポインタを標準ブロックに配置するだけで、目的の効果がほぼ正確になります(たとえば、ポインタのスコープは、関連するブロックの場合と同様に、ローカルのみです)。

integer,target :: a(2:4,2)

block

    integer,pointer :: c(:)

    c(2:4) => a(:,1)

    print *, lbound(c), ubound(c)    ! 2 4

end block
于 2018-12-12T16:56:36.740 に答える