如您所知,对于C中的任何标识符ident
,您可以编写&ident
以获取ident
的内存位置(指针),无论该位置是否位于堆或堆栈。在使用C类型时,访问此功能通常很有帮助。
FFI中的Haskell是否有相同的操作?
答案 0 :(得分:2)
如果你有一个C标识符,你要导入Haskell,你可以通过“&”将它转换为指向该地址的指针。 FFI declarations中的语法,如下所示:
foreign import ccall "&" bar :: Ptr CInt
通常,这是一件非常罕见的事情,因为您导入的几乎所有东西都已经是指针。
Haskell值本身也可以使用stable pointers转换为指针,以确保它们不受垃圾收集器的影响。