朱莉娅:如何获取指针指向的数组?

时间:2019-09-11 04:56:41

标签: pointers julia

a = [1,2,3]
ap = pointer(ap)

假设我只得到ap,如何在不使用Vector{Int}的情况下找回指针AP指向的unsafe_load

3 个答案:

答案 0 :(得分:1)

您不应在Julia中使用指针来引用对象。要引用对象,请使用Ref,例如:reference = Ref(obj)。要取消引用:obj = reference[]Ref是轻量级的,可以与垃圾回收器一起很好地使用,并且不会导致段错误。

指针在Julia中很有用,但通常只能进行奇怪的读/写操作。如果只有一个指针(由于某种原因),则可以使用Array创建指向该内存的unsafe_wrap

答案 1 :(得分:0)

正确的用法是不要使用pointer,因为它是为C设计的。您应该使用

pointer_from_objref。例如

x = [1,2,3]
x === unsafe_pointer_to_objref(pointer_from_objref(x))

答案 2 :(得分:0)

您可以使用unsafe_warp函数包装指向Julia数组的指针。参见here

顺便说一句,pointer不再起作用,您可以改用Base.unsafe_convert。这是同时使用两者的示例

a = [1,2,3]
ap = Base.unsafe_convert(Ptr{Clonglong}, a)
a2 = unsafe_wrap(Vector{Int64}, ap, 3, own=false)