我的理解是,在Fortran中,數組通過引用傳遞。因此,將指針傳遞給大型數組(相對於傳遞數組本身而言)有優勢。Fortran調用:傳遞指針與傳遞參考的優點
您是否也可以在遞歸函數的上下文中闡明這一點。我見過指針用於「效率」的實現,但如果所有內容都通過引用傳遞,那麼指針的好處是什麼。
下面是一個例子。我有一個數組X(實際上可以說它是一個非常大的數組)。當我打電話上方,然後如FORTRAN傳遞給它的參考陣列X是不可複製的子程序
SUBROUTINE FOO(X)
INTEGER, INTENT(IN) :: X(:)
INTEGER :: I
DO I = 1, 4
WRITE(*,*) X(I)
ENDDO
END SUBROUTINE FOO
:
INTEGER :: X(:)
我可以定義一個subrouitne負責這種陣列如下。現在可以說我有子程序的修改版本:
SUBROUTINE FOO2(X)
INTEGER, POINTER, INTENT(IN) :: X(:)
INTEGER :: I
DO I = 1, 4
WRITE(*,*) X(I)
ENDDO
END SUBROUTINE FOO2
我可以從程序中調用FOO2
如下:
PROGRAM TEST
IMPLICIT NONE
INTEGER, TARGET :: X(5)
INTEGER, POINTER :: Y(:)
X = (/1,2,3,4,5/)
Y => X
CALL FOO2(Y)
END PROGRAM TEST
然後這裏是我的問題:有兩個版本之間的性能差異的foo?有沒有什麼有用的情況下,FOO2的聲明可能比FOO更好?
你似乎很困惑。你是指Fortran指針變量還是地址?通過引用傳遞和傳遞指針是在機器代碼級別或C語言級別(幾乎)相同。向我們展示你們兩種方法的例子,你們的描述絕對不夠。現在投票結束。 –
指針,什麼是指針?我是Fortran程序員。你是什麼意思*,而不是傳遞數組本身*?現在,我傾向於同意@VladimirF(我通常會這樣做),並且看不出你的問題如何可以得出很好的答案。 –
@VladimirF我並不困惑,但我可以更清楚。我的意思是指針變量(我不知道在fortran中指針是什麼意思,所以我沒有看到任何混淆的原因)。我只想了解將數組X傳遞給子例程與將效率的角度向目標X聲明的指針傳遞給該子例程是否有區別。我還應該補充說,你不應該因爲你不明白要問什麼而拒絕投票問題。只是要求澄清。 – deepak