Сообщить об ошибке.

Форвардные объявления типов в модуле ctypes Python

Неполные типы - это структуры, объединения или массивы, члены которых еще не указаны. В языке C они определяются форвардными объявлениями - которые определены позже:

struct cell; /* forward declaration */

struct cell {
    char *name;
    struct cell *next;
};

Прямой перевод в код модуля ctypes будет таким, но он работать не будет:

>>> from ctypes import *
>>> class cell(Structure):
...     _fields_ = [("name", c_char_p),
...                 ("next", POINTER(cell))]
...
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "<stdin>", line 2, in cell
# NameError: name 'cell' is not defined

Потому что ячейка нового класса class cell недоступна в самом операторе класса. В ctypes можно определить класс ячейки cell и установить атрибут _fields_ позже, после объявления пустого класса:

>>> from ctypes import *
>>> class cell(Structure):
...     pass
...
>>> cell._fields_ = [("name", c_char_p),
...                  ("next", POINTER(cell))]

Попробуем создать два экземпляра ячейки и поставим указатели друг на друга, а потом, несколько раз проследуем цепочке указателей:

>>> c1 = cell()
>>> c1.name = "foo"
>>> c2 = cell()
>>> c2.name = "bar"
>>> c1.next = pointer(c2)
>>> c2.next = pointer(c1)
>>> p = c1
>>> for i in range(8):
...     print(p.name, end=" ")
...     p = p.next[0]
...
foo bar foo bar foo bar foo bar