Как правильно объявить две структуры с указателями друг на друга - C (СИ)
Формулировка задачи:
В одном файле определены две структуры.
Компилятор ругается, что не знает, что такое в первой структуре "data2 *d" и, аналогично про вторую структуру. Как правильно объявить структуры, чтобы компилятор смог корректно обработать код?
typedef struct Tdata1 {
int a;
data2 *d;
} data1;
typedef struct Tdata2 {
int a;
data1 *d;
} data2;Решение задачи: «Как правильно объявить две структуры с указателями друг на друга»
textual
Листинг программы
#include <stdio.h>
typedef struct Tdata2 data2;
typedef struct Tdata1 {
int a;
data2 *d;
} data1;
typedef struct Tdata2 {
int a;
data1 *d;
} data2;
int main()
{
data1 d1;
data2 d2;
d1.a = 10;
d1.d = &d2;
d1.d->a = 15;
d1.d->d = &d1;
printf("\nd1:\nd1.a = %d\nd1.d->a = %d\nd1.d->d->a = %d\n", d1.a, d1.d->a, d1.d->d->a);
printf("\nd2:\nd2.a = %d\nd2.d->a = %d\nd2.d->d->a = %d\n", d2.a, d2.d->a, d2.d->d->a);
return 0;
}
Объяснение кода листинга программы
- В этом коде объявлены две структуры:
data1иdata2. - Каждая из структур содержит указатель на другую структуру.
- В структуре
data1указатель называетсяd, а в структуреdata2-d. - В функции
main()создаются два объекта типаdata1иdata2. - Указатель
d1.dинициализируется адресом объектаd2. - Указатель
d1.d->dинициализируется адресом объектаd1. - Значение поля
aв объектеd1устанавливается равным 10. - Значение поля
aв объектеd2устанавливается равным 15 через указательd1.d. - Значение поля
aв объектеd1устанавливается равным 15 через указательd1.d->d. - Значение поля
aв объектеd2устанавливается равным 15 через указательd1.d->d. - Значения полей
aв объектахd1иd2выводятся на экран. - Возвращается 0, что означает успешный конец работы программы.