Как правильно объявить две структуры с указателями друг на друга - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В одном файле определены две структуры.
Листинг программы
  1. typedef struct Tdata1 {
  2. int a;
  3. data2 *d;
  4. } data1;
  5. typedef struct Tdata2 {
  6. int a;
  7. data1 *d;
  8. } data2;
Компилятор ругается, что не знает, что такое в первой структуре "data2 *d" и, аналогично про вторую структуру. Как правильно объявить структуры, чтобы компилятор смог корректно обработать код?

Решение задачи: «Как правильно объявить две структуры с указателями друг на друга»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. typedef struct Tdata2 data2;
  4.  
  5. typedef struct Tdata1 {
  6.    int a;
  7.    data2 *d;
  8. } data1;
  9.  
  10. typedef struct Tdata2 {
  11.    int a;
  12.    data1 *d;
  13. } data2;
  14.  
  15. int main()
  16. {
  17.     data1 d1;
  18.     data2 d2;
  19.  
  20.     d1.a = 10;
  21.     d1.d = &d2;
  22.     d1.d->a = 15;
  23.     d1.d->d = &d1;
  24.  
  25.     printf("\nd1:\nd1.a = %d\nd1.d->a = %d\nd1.d->d->a = %d\n", d1.a, d1.d->a, d1.d->d->a);
  26.     printf("\nd2:\nd2.a = %d\nd2.d->a = %d\nd2.d->d->a = %d\n", d2.a, d2.d->a, d2.d->d->a);
  27.  
  28.     return 0;
  29. }

Объяснение кода листинга программы

  1. В этом коде объявлены две структуры: data1 и data2.
  2. Каждая из структур содержит указатель на другую структуру.
  3. В структуре data1 указатель называется d, а в структуре data2 - d.
  4. В функции main() создаются два объекта типа data1 и data2.
  5. Указатель d1.d инициализируется адресом объекта d2.
  6. Указатель d1.d->d инициализируется адресом объекта d1.
  7. Значение поля a в объекте d1 устанавливается равным 10.
  8. Значение поля a в объекте d2 устанавливается равным 15 через указатель d1.d.
  9. Значение поля a в объекте d1 устанавливается равным 15 через указатель d1.d->d.
  10. Значение поля a в объекте d2 устанавливается равным 15 через указатель d1.d->d.
  11. Значения полей a в объектах d1 и d2 выводятся на экран.
  12. Возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы