C_F_POINTER — C를 Fortran 포인터로 변환

C_F_POINTER — C를 Fortran 포인터로 변환

C에서 받은 주소를 Fortran 포인터로 만들어 배열처럼 다루고 싶을 때가 있어요. C_F_POINTER는 C 포인터 CPTR의 대상을 Fortran 포인터 FPTR에 할당하고 그 형상(shape)을 지정해요.

출처: gfortran 공식 문서 - C_F_POINTER

본문

CALL C_F_POINTER(CPTR, FPTR[, SHAPE, LOWER])

설명(Description)

C_F_POINTER(CPTR, FPTR[, SHAPE, LOWER])는 C 포인터 CPTR의 대상을 Fortran 포인터 FPTR에 할당하고 그 형상을 지정해요. 배열 FPTR의 경우 하한은 LOWER가 있으면 그 값, 없으면 1이 돼요.

분류(Class)

서브루틴(Subroutine)

인자(Arguments)

  • CPTRC_PTR 타입의 스칼라예요. INTENT(IN)이에요.
  • FPTRcptr와 상호운용 가능한 포인터예요. INTENT(OUT)이에요.
  • SHAPE — (선택) INTENT(IN)INTEGER 1차원 배열이에요. FPTR가 배열일 때만(그리고 그럴 때는 반드시) 있어야 해요. 크기는 FPTR의 랭크와 같아야 해요.
  • LOWER — (선택) INTENT(IN)INTEGER 1차원 배열이에요. SHAPE가 없으면 있어서는 안 돼요. 크기는 FPTR의 랭크와 같아야 해요.

예제

program main
  use iso_c_binding
  implicit none
  interface
    subroutine my_routine(p) bind(c,name='myC_func')
      import :: c_ptr
      type(c_ptr), intent(out) :: p
    end subroutine
  end interface
  type(c_ptr) :: cptr
  real,pointer :: a(:)
  call my_routine(cptr)
  call c_f_pointer(cptr, a, [12])
end program main

C 루틴이 돌려준 cptr을 길이 12의 1차원 실수 배열 포인터 a로 연결하는 예제예요.

표준(Standard)

Fortran 2003 이상, LOWER 인자는 Fortran 2023 이상

같이 보기

C_LOC — 객체의 C 주소 얻기, C_F_PROCPOINTER — C를 Fortran 프로시저 포인터로 변환, C_F_STRPOINTER — C 문자열을 Fortran 문자열 포인터로 변환