私はずっと前に、FORTRANではすべてが価値によって渡されたと言われました。したがって、私はこれを行う必要があるだろう(mySubroutine
提供適切に他の場所で定義される):数量はどのようにFortranで参照されますか?
double precision :: myArray(2)
myArray(1:2) = (/ 2.3d0, 1.5d0 /)
CALL mySubroutine(myArray)
しかし、私はまた、プログラムのコンパイルと私は必要とせずに、この
CALL mySubroutine((/ 2.3d0, 1.5d0 /))
をすれば期待通りに実行されることを発見仲介配列myArray
を定義します。参考までにmyArray
をmySubroutine
に渡していると思いました。第2版では何が起こっていますか?コンパイラはサブルーチン呼び出しをアンパックして、一時変数を宣言して参照渡しするだけですか?
Fortranでは、デフォルトですべてが参照渡しされます(または、動作するかのように動作します)。後者の場合は、コンパイラが効果的に一時配列を作成し、参照を渡すことが正しいです。 'mysubroutine'が引数を変更すると、最初のケースでは' myarray'が変更され、2番目のケースでは予測できないことが起こることに注意してください。 – agentp