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

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

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

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

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

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;
}

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

  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
Похожие ответы