추가 처리를 위해 사용자 배열의 주소를 저장하는 프로 시저를 작성하려고합니다. 이 테스트 프로그램에는 문제가 캡슐화되어 있습니다.
program test_ptr
real(4), target, allocatable :: i4(:,:)
real(8), target, allocatable :: i8(:,:)
real(4), pointer :: p(:,:)
allocate(i4(2,2))
allocate(i8(2,2))
p => i4 ! ok
p => i8 ! compile error
end
컴파일러는 다른 유형에 대해 다른 포인터를 만들 것을 제안합니다. 그러나 real (4) 및 real (8)에 대해 별도의 포인터를 만들고 싶지 않습니다. 저는 일반적이고 컴팩트 한 솔루션을 만들고 다른 유형의 데이터에 대한 하나의 포인터를 만들려고합니다. 가능합니까?
정말 주소를 저장하려면 다형성에주의해야합니다. 다형성 변수에 대한 포인터는 종종 실제 데이터와 다른 주소를 가진 설명자를 가리 킵니다. 주소를 얻기 위해 모듈과 함수 에 type(c_ptr)
정의 된 사용을 고려하십시오 . C와의 인터페이스에만 사용할 필요는 없으며 순수한 Fortran에서 편리한 곳이 몇 군데 있습니다.iso_c_binding
c_loc()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다