On this page:
_ pointer
_ gcpointer
_ racket
_ scheme
_ fpointer
_ or-null
_ gcable

3.5 Pointer Types

Corresponds to Racket “C pointer” objects. These pointers can have an arbitrary Racket object attached as a type tag. The tag is ignored by built-in functionality; it is intended to be used by interfaces. See Tagged C Pointer Types for creating pointer types that use these tags for safety. A #f value is converted to NULL and vice versa.

The address referenced by a _pointer value must not refer to memory managed by the garbage collector (unless the address corresponds to a value that supports interior pointers and that is otherwise referenced to preserve the value from garbage collection). The reference is not traced or updated by the garbage collector.

Like _pointer, but for a value that can refer to memory managed by the garbage collector.

Although a _gcpointer can reference to memory that is not managed by the garbage collector, beware of using an address that might eventually become managed by the garbage collector. For example, if a reference is created by malloc with 'raw and released by free, then the free may allow the memory formerly occupied by the reference to be used later by the garbage collector.

A type that can be used with any Racket object; it corresponds to the Scheme_Object* type of Racket’s C API (see Inside: Racket C API). It is useful only for libraries that are aware of Racket’s C API.

Similar to _pointer, except that when an _fpointer is extracted from a pointer produced by ffi-obj-ref, then a level of indirection is skipped. A level of indirection is similarly skipped when extracting a pointer via get-ffi-obj. Like _pointer, _fpointer treats #f as NULL and vice versa.

A type generated by _cprocedure builds on _fpointer, and normally _cprocedure should be used instead of _fpointer.

(_or-null ctype)  ctype?
  ctype : ctype?
Creates a type that is like ctype, but #f is converted to NULL and vice versa. The given ctype must have the same C representation as _pointer, _gcpointer, or _fpointer.

(_gcable ctype)  ctype?
  ctype : ctype?
Creates a type that is like ctype, but whose base representation is like _gcpointer instead of _pointer. The given ctype must have a base representation like _pointer or _gcpointer (and in the later case, the result is the ctype).