2

次のように宣言された次元の配列があるとします。

integer, dimension(5) :: dims
dims = (/ 5, 6, 7, 8, 9 /)

dimsの要素を使用してそれぞれの次元のサイズを指定して、この配列を最も簡単に使用して別の配列を割り当てるにはどうすればよいですか? 2 番目の配列が次のように宣言されているとします。

real, dimension(:,:,:,:,:), allocatable :: dset

次のことができないのはなぜですか?

allocate (dset(dims(:)))

Error: Rank mismatch in array referenceコンパイルしようとすると取得します。

私はこれを行うことができることに気づきました:

allocate (dset(dims(1), dims(2), dims(3), dims(4), dims(5)))

しかし、私はもっと簡単に拡張できるものを探しています。

4

1 に答える 1

2

allocate(dset(dims(:)))コンパイラが与える正確な理由で書くことはできません:それらは異なるランクを持っています. を印刷shape(dims)すると、5画面に表示されます。を印刷すると、またはshape(dset)のいずれかが表示されます(割り当てたかどうかによって異なります)。はランク 1 の配列、はランク 5 の配列です。0 0 0 0 05 6 7 8 9dimsdset

したがって、アロケータブルを割り当てる唯一の方法は、拡張できないと感じる明示的な方法を使用することです。

于 2013-07-22T17:23:35.093 に答える