朱莉娅:有没有办法把数字转换成指针



正如标题所说,有没有办法将存储地址的数字(比如浮点或整数(转换为指针?

例如,在Julia中,可以通过以下操作将指针转换为整数:

data = [1, 2] 
ptr = pointer( data )      # Has type "Ptr{Int64}"
address = UInt64( ptr )    # Has type "UInt64"

如何逆转这些步骤以取回指针?说:

ptr = unknownFunction(address) # Has type "Ptr{Int64}"

或者,有没有一种方法可以直接更改指针的地址?假设有一个指针带有:

Ptr{Int64} @0x0000000036f94110

如何将它的地址修改为另一个数字,例如0x000000003fffff0。

是的,这是可能的,但前提是您已经知道指针上有什么数据:

julia> arr = [15, 6, 1];
julia> address = UInt(pointer(arr));
julia> unsafe_load(Ptr{Int}(address))
15

对于第二个问题,Julia支持指针运算。在这里,您可以向数组中第一个元素的指针添加8个字节:

julia> unsafe_load(Ptr{Int}(address) + 8)
6

但我赞同其他人对在Julia中使用指针的保留意见。它们只有在与C进行互操作时,或者在执行有问题的低级比特黑客技巧时才真正有用。

最新更新