Во-первых, давайте создадим некоторые реальные определения, чтобы сделать этот бетон.
struct b {
int x;
};
struct a_with_b {
struct b b;
}
struct a_with_b_ptr {
struct b *bp;
}
Когда вы инкапсулируете структуру, вам просто нужно выделить внешнюю структуру (и поскольку внутренняя структура не является указателем, вы используете .
для ссылки на члены структуры innert):
struct a_with_b *a1 = malloc(sizeof(struct a_with_b));
a1->b.x = 3;
Но когда вы инкапсулируете указатель, вы должны выделять каждый независимо и использовать ->
при обращении к элементам внутренней структуры:
struct a_with_b_ptr *a2 = malloc(sizeof(struct a_with_b_ptr));
a1->b = malloc(sizeof(struct b));
a1->b->x = 3;