8.57 C_F_POINTER — Convert C into Fortran pointer

Synopsis:

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

Description:

C_F_POINTER(CPTR, FPTR[, SHAPE, LOWER]) assigns the target of the C pointer CPTR to the Fortran pointer FPTR and specifies its shape. For an array FPTR, the lower bounds are specified by LOWER if present and otherwise equal to 1.

Class:

Subroutine

Arguments:
CPTRscalar of the type C_PTR. It is INTENT(IN).
FPTRpointer interoperable with cptr. It is INTENT(OUT).
SHAPE(Optional) Rank-one array of type INTEGER with INTENT(IN). It shall be present if and only if FPTR is an array. The size must be equal to the rank of FPTR.
LOWER(Optional) Rank-one array of type INTEGER with INTENT(IN). It shall not be present if SHAPE is not present. The size must be equal to the rank of FPTR.
Example:
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
Standard:

Fortran 2003 and later, with LOWER argument Fortran 2023 and later

See also:

C_LOC — Obtain the C address of an object,
C_F_PROCPOINTER — Convert C into Fortran procedure pointer