Один из способов взломать ограниченную форму полиморфизма в 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);
Так что мой вопрос: как именно это работает? Это потому, что, когда вы применяете его как базу и ссылаетесь на переменную, вы ссылаетесь на int member 'x' как смещение от начала структуры «base»? Это единственное, что я могу придумать, любая помощь будет оценена.
Спасибо большое!
+1 Это фактически гарантированную C спецификации. – bta