Pointers 球拍中的#ptr、#pointer和#cpointer之间的差异';s FFI

Pointers 球拍中的#ptr、#pointer和#cpointer之间的差异';s FFI,pointers,racket,ffi,Pointers,Racket,Ffi,Racket FFI的文档类型为和。1 但是,文档(在撰写此问题时)似乎没有比较这三种不同的类型。显然,前两个是生成ctype?s的函数,其中最后一个是ctype?本身。但是什么时候我会用一种而不是另一种呢 1它还有其他类型,如\u框,\u列表,\gcpointer,和\cpointer/null。这些都是这三种功能的变体。 \u ptr是一个宏,用于创建适合函数类型的类型,在函数类型中,需要通过作为参数传递的指针传递数据(C中非常常见的习惯用法) \u pointer是一种通用的指针类型,几乎

Racket FFI的文档类型为和。1

但是,文档(在撰写此问题时)似乎没有比较这三种不同的类型。显然,前两个是生成
ctype?
s的函数,其中最后一个是
ctype?
本身。但是什么时候我会用一种而不是另一种呢

1它还有其他类型,如
\u框
\u列表
\gcpointer
,和
\cpointer/null
。这些都是这三种功能的变体。

  • \u ptr
    是一个宏,用于创建适合函数类型的类型,在函数类型中,需要通过作为参数传递的指针传递数据(C中非常常见的习惯用法)

  • \u pointer
    是一种通用的指针类型,几乎可以在任何需要或返回指针的地方使用。在球拍一侧,它变成一个不透明的值,您无法很容易地操纵(如果需要,您可以使用
    ptr ref
    )。请注意,文档在使用它时对与GC的交互有一些警告

  • \u cpointer
    构造了更安全的
    \u指针
    变体,使用标记确保不会混淆不同类型的指针。通常,使用
    定义cpointer type
    比手动构造它们更方便。换句话说,这些帮助您构建由Racket的C指针表示的抽象。您可以使用
    cpointer push-tag手动执行此操作
    \u指针
    ,但这不太方便

我还写了一篇博文,详细介绍了一些指针问题:

  • \u ptr
    是一个宏,用于创建适合函数类型的类型,在函数类型中,需要通过作为参数传递的指针传递数据(C中非常常见的习惯用法)

  • \u pointer
    是一种通用的指针类型,几乎可以在任何需要或返回指针的地方使用。在球拍一侧,它变成一个不透明的值,您无法很容易地操纵(如果需要,您可以使用
    ptr ref
    )。请注意,文档在使用它时对与GC的交互有一些警告

  • \u cpointer
    构造了更安全的
    \u指针
    变体,使用标记确保不会混淆不同类型的指针。通常,使用
    定义cpointer type
    比手动构造它们更方便。换句话说,这些帮助您构建由Racket的C指针表示的抽象。您可以使用
    cpointer push-tag手动执行此操作
    \u指针
    ,但这不太方便

我还写了一篇博文,详细介绍了一些指针问题: