正如标题所说,有没有办法将存储地址的数字(比如浮点或整数(转换为指针?
例如,在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进行互操作时,或者在执行有问题的低级比特黑客技巧时才真正有用。