FORTRAN III
■ このスレッドは過去ログ倉庫に格納されています
0164デフォルトの名無しさん
2005/05/21(土) 02:03:11>何故引数がコピーされるのでしょうか?
サブルーチン側が連続した配列を想定しているのに
連続していない(可能性がある)配列が渡されたから。
program test
integer, dimension(5,4) :: a = 1
integer, dimension(3,2) :: b = 2
call foo(a(2:4,2:3))
call foo(b)
print *, a
print *, b
contains
subroutine foo(x)
integer, dimension(3,2), intent(inout) :: x
x = 3
end subroutine foo
end program test
>Fortranって call by reference (call by value の対義語)じゃないの?
この場合、ちゃんと「一時的な配列の先頭アドレス」が渡されます。
>また、コピーされることの弊害として、どのような事が考えられるでしょうか?
配列のコピー・書き戻しによるオーバーヘッドの増加、使用メモリ量の増加等。
■ このスレッドは過去ログ倉庫に格納されています