do
配列、ループ、b(1:n) = a(1:n)
およびをコピーするために言及した3つの方法b = a
はすべて同等です。a
配列の内容を配列にコピーしますb
。 a
とb
は単純な配列であり、派手なポインターなどではないため、割り当てa = b
は基本的に数式と同じです。参照が行われている場合 (ユーザーが知っておく必要があること) はありません。これが、Fortran が学習するのに非常に簡単な言語である理由です。Fortran ではポインター配列を使用できますが、これはまったく別の問題です。
M Metcalf と J Reid のFortran 90/95 の説明は、Fortran 言語の機能に関する参考資料として常に役立ちます。48ページから:
3.11 配列代入
組み込み代入により、配列式を同じ形状の配列変数に代入できます。これは、式の各要素が変数の対応する要素に代入されたかのように解釈されます。たとえば、宣言を使用して
real, dimension(10, 20) :: a
割り当て
a = a + 1.0
forと にa(i,j)
置き換えます。a(i,j) + 1.0
i=1,2..,10
j=1,2,..,20
また、スカラー式を配列に割り当てることができることに注意してください。この場合、saclar 値はすべての配列要素にブロードキャストされます。
これが実際にどのように実装されているかという点では、これはあなたの質問で推進していると思いますが、これは Fortran 標準では完全に指定されていません。この種のことは未指定のままにして、コンパイラの作成者が好きなように最適化を行うことができるようにします。たとえば、割り当てa = b
では、 の要素b
がコピーされる順序a
は標準で指定されていないため、さまざまなコンパイラがさまざまな方法でこれを行うことができます。この質問について知っておく必要があるのは、提供されたa
とb
はポインターではなく、a
とb
は別個の配列であり、一方の要素を変更しても他方の対応する要素は変更されないということだけです。センスなので、a=b
b
は「ディープ コピー」であり、すべてのアイテムを のメモリ ロケーションにコピーすると考えることができますa
。