Как правильно объявить две структуры с указателями друг на друга - 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, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д