Полунаследование в C: Как этот отрывок работает?

Один способ взломать ограниченную форму полиморфизма в 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' как смещение от запуска 'основной' структуры? Это - единственная вещь, о которой я могу думать, любая справка ценилась бы.

Большое спасибо!

5
задан Georg Fritzsche 23 July 2010 в 21:50
поделиться