다음 코드를 작성하는 올바른 방법은 무엇입니까? 내가 REAL(KIND=8), DIMENSION(0:10)
으로 bar
에 ptr
를 선언하는 경우fortran에 포인터 인수가 전달됨
PROGRAM foo
INTEGER :: x
REAL(KIND=8), TARGET, DIMENSION(0: 10) :: array
REAL(KIND=8), POINTER, DIMENSION(:) :: ptr
ptr => array
CALL bar(ptr)
END PROGRAM foo
SUBROUTINE bar (ptr)
REAL(KIND=8), POINTER, DIMENSION(:) :: ptr
INTEGER x
DO x =0, 10
ptr(x) = 2 // seg faults
ENDDO
END SUBROUTINE bar
그것은 작동합니다. 하지만 일반적으로 전달 된 배열의 크기를 알지 못할 수도 있으므로 ptr
을 일부 배열에 대한 포인터로 선언하는 방법이 있습니까? 나는 이것을 컴파일 중이다 gfortran
이는 경우가 어디 _explicit interface_는'foo'의'bar'에 필요합니다. 예를 들어 http://stackoverflow.com/q/9374691/3157076을 참조하십시오. – francescalus
C를 복제하려고하는 것 같습니다. Fortran에서 생각하는 것이 좋습니다. Bálint의 대답을주의 깊게 읽으십시오. Ian도 옳습니다. –