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