我有一个存储数组的类型:
type data
type(someType) pointer :: someTypePtr(:)
end type
我使用
为someTypePtr分配了一些东西type(data), intent(inout) :: this
integer, intent(in) :: lb, ub
type(someType), target, intent(in) :: sometype(lb:ub)
this%someTypePtr => sometype
稍后我创建了一个c_ptr,指向我刚刚提到的实例 this 。当我之后将此指针强制转换为fortran类型时,下限以0开始:
type(c_ptr) :: ptr
type(someType) :: data
call c_f_pointer(ptr, data)
write(*,*) lbound(data%someTypePtr) !will give 0
是否有类似于重塑的内容将someTypePtr
更改回原来的lbound:ubound
?
答案 0 :(得分:1)
奇怪的是,它应该是1
,而不是0
。无论如何,您可以在之后重新映射指针:
use iso_c_binding
real(c_float), pointer :: ptr(:)
type(c_ptr) :: ptr_c
allocate(ptr(5:6))
ptr_c = c_loc(ptr(lbound(ptr)))
call c_f_pointer(ptr_c, ptr, [2])
print *, lbound(ptr)
ptr(5:6) => ptr
print *, lbound(ptr)
end
运行:
> ./a.out
1
5