Один способ взломать ограниченную форму полиморфизма в C состоит в том, чтобы сделать что-то вроде этого:
typedef struct {
int x;
} base;
typedef struct {
base super;
int y;
} derived;
Теперь можно назвать полученный экземпляр основным экземпляром, в зависимости от того, как переменная брошена, т.е.:
derived my_derived;
my_derived.y = 10;
my_derived.super.x = 20;
//will print 10
printf("%d", (&my_derived)->y);
//will print 20
printf("%d", ((base*)(&my_derived) )->x);
Таким образом, мой вопрос, как точно это работает? Это, потому что, когда Вы снимаете его в качестве основы и ссылки на переменную, Вы ссылаетесь на международного участника 'x' как смещение от запуска 'основной' структуры? Это - единственная вещь, о которой я могу думать, любая справка ценилась бы.
Большое спасибо!