つまり、
struct Foo {
 int m_a, m_b;
};
struct Bar {
 struct Foo m_base;
 int m_x, m_y;
};
としとけば、
 void print_foo(struct Foo* p) { printf("a=%d, b=%d\n", p->m_a, p->m_b); }
に対して、
 struct Bar b;
 print_foo((struct Foo*)&b);
とできる、
これが(virtualでない)継承の真実の姿、