Pythonのソースコードには、次のようなマクロ定義があります。
#define PyObject_HEAD \
int ob_refcnt; \
struct _typeobject *ob_type;
#define PyObject_VAR_HEAD \
PyObject_HEAD \
int ob_size;
typedef struct _object {
PyObject_HEAD
} PyObject;
typedef struct _object {
PyObject_HEAD
long ob_ival;
} PyIntObject;
typedef struct {
PyObject_VAR_HEAD
} PyVarObject;
問題は、なぜPyObject *がPythonの各オブジェクト(PyIntObject、PyVarObjectなど)を指すことができるのかということです。