假设我有一个变量:
let a = ref 3 in magic_code
Magic_code 应该打印存储在内存中的地址a
。有没有类似的东西?我用谷歌搜索了这个,但没有任何结果......
假设我有一个变量:
let a = ref 3 in magic_code
Magic_code 应该打印存储在内存中的地址a
。有没有类似的东西?我用谷歌搜索了这个,但没有任何结果......
这应该有效:
let a = ref 3 in
let address = 2*(Obj.magic a) in
Printf.printf "%d" address;;
OCaml 使用单词的最低有效位来区分堆指针和整数,0 表示指针,1 表示整数(参见 Real World OCaml 中的这一章)。
Obj.magic
是一个类型的函数'a -> 'b
,可以让你绕过输入(即任意“强制转换”)。int
如果您通过不安全地通过强制 OCaml 将引用解释为Obj.magic
,则您获得的值是地址右移一位。要获得实际的内存地址,您需要将其左移 1 位,即将该值加倍。
另请参阅此答案。