To jest typowy i częsty idiom dziedziczenia implementowany w C. Wystarcza rzutowanie na wskaźnik struktury rodzica aby dostać się do jego atrybutów bezpośrednio. Warunkiem koniecznym jest występowanie tegoż rodzica jako 1 składnika struktury dziecka. Tak się buduje "obiekty sterowników" np. w systemie GNU/Linux lub tworzy się inne wymaganie hierarchie.
#include <stdio.h>
#include <stdlib.h>
struct rodzina_t{
int a;
int b;
};
struct znajomi_t{
struct rodzina_t rodzina;
int c;
};
struct znajomi_t* ustaw(struct znajomi_t* p) {
struct rodzina_t * rodzinaPtr = (struct rodzina_t *)p;
rodzinaPtr->a = 1;
rodzinaPtr->b = 2;
p->c = 3;
return p;
}
void pokaz(struct znajomi_t const * p) {
struct rodzina_t * rodzinaPtr = (struct rodzina_t *)p;
printf("%d, %d, %d\n", rodzinaPtr->a, rodzinaPtr->b, p->c);
}
int main(void) {
struct znajomi_t znajomi;
ustaw(&znajomi);
pokaz(&znajomi);
return EXIT_SUCCESS;
}