A struct
не может быть внутри другого struct
, который находится внутри первого struct
, по той же причине, что в реальном мире вы не можете поместить объект внутри другого объекта внутри первого объекта.
Объект может ссылаться на другой объект с помощью указателя.
Например, struct Book
может иметь член, который является указателем на struct Author
или массивом указателей на struct Author
.Это может быть объявлено так:
struct Book
{
int isbn;
char title[21];
struct Author *bauthor[21]; // Array of pointers to struct Author.
int numofauth;
char section[21];
int copies;
};
Аналогично, struct Author
может содержать указатели на struct Book
:
struct Author
{
char auth_name[21];
struct Book *auth_books[21]; // Array of pointers to struct Book.
};
При создании объектов struct Book
или struct Author
Вам нужно будет заполнить указатели.Для этого вам нужно будет создать каждую из структур, а затем назначить значения указателям.Например:
struct Book *b = malloc(sizeof *b);
if (b == NULL) ReportErrorAndExit();
struct Author *a = malloc(sizeof *a);
if (a == NULL) ReportErrorAndExit();
b->isbn = 1234;
strcpy(b->title, "Forward Declarations");
b->bauthor[0] = a; // List a as one of b's authors.
b->numofauth = 1;
strcpy(b->section, "Structures");
b->copies = 1;
strcpy(a->auth_name, "C committee");
a->auth_books[0] = b; // List b as one of a's books.