Real view on complex array using c_pointer

Thanks for good advice!

Do you mean like this?

    subroutine real_view(cp, rp, ierr)
        use ISO_C_binding, only: c_f_pointer, c_loc
        complex(wp), intent(in), pointer :: cp(:)
        real(wp), intent(inout), pointer :: rp(:)
        integer, intent(out) :: ierr
        
        if (.not. is_contiguous(cp)) then
            ierr = -1
            return
        end if
        if (.not. associated(cp)) then
            ierr = -2
            return
        end if

        call c_f_pointer(c_loc(cp), rp, shape=[2*size(cp)])

    end subroutine real_view

called like this?

    complex(wp), target, allocatable :: c(:)
    complex(wp), pointer :: cp(:) => null()
    real(wp), pointer :: rp(:) => null()
    integer :: ierr
    
    ! Create complex 2-element array
    allocate(c(2))
    c(1) = cmplx(1_wp, 2_wp, wp)
    c(2) = cmplx(3_wp, 4_wp, wp)

    ! Create a 4-element real "view" into the same memory area
    cp => c
    call real_view(cp, rp, ierr)