Opaque data type

The concrete representation of the type is hidden from its users, and the visible implementation is incomplete.

Typical examples of opaque data types include handles for resources provided by an operating system to application software.

For example, the POSIX standard for threads defines an application programming interface based on a number of opaque types that represent threads or synchronization primitives like mutexes or condition variables.

[3] Some languages, such as C, allow the declaration of opaque records (structs), whose size and fields are hidden from the client.

The only thing that the client can do with an object of such a type is to take its memory address, to produce an opaque pointer.