Fortran 초보자이며 gfortran을 사용하여 컴파일 할 때 ifort 코드를 채택하려고합니다.동적 배열을 사용하는 c_loc()
내가 ifort뿐만 gfortran 컴파일과 동적 배열을 받아 들일 것 같습니다 c_loc()
기능에 문제가 오류와 함께 중지 :
Error: Argument 'septr1' to 'c_loc' at (1) must be an associated scalar POINTER
그래서 사람이 gfortran와 컴파일에 대해 다음 ifort 코드를 적용하는 방법을 알고 않습니다 ?
integer(c_int), dimension(:), pointer :: septr1=>null()
type(c_PTR) :: septr
allocate (septr1(10))
septr1 = 33
septr = c_loc(septr1)
tnx,이 소리는 간단합니다. 이런 식으로 배열은 c 프로그램에서 올바르게 액세스 할 수 있습니까? 나는 어딘가에 웹에서 Fortran이 배열 메모리를 C와 같은 방식으로 처리하지 않는다는 것을 읽었습니다. – kodmasin
액세스 할 수 있지만 인덱스의 순서는 바뀔 것입니다. http://en.wikipedia.org/wiki/Row-major_order 인접하지 않은 배열에 문제가있을 수 있습니다. 그러나 실제로는 일반적인 Fortran 방식으로 참조로 배열을 전달하고 명시 적 C 포인터를 사용하지 않는 것이 훨씬 좋습니다. 답 2 번을 참고하십시오. –
@VladimirF, C 포인터를 사용하는 대신에 참조로 Fortran 배열을 전달하는 것이 왜 훨씬 좋은가? 유형 안전성과 명확성의 일부 유사점입니까? – patrickvacek