Положение структуры в C

#c #struct

#c #структура

Вопрос:

Чтобы сделать мой код как можно более понятным, я пытаюсь сделать что-то вроде :

 struct Test {
   int a; 
   int b;
   struct Test2 c;
};

struct Test2{
   int d;
};
  

Конечно, этот код неверен, потому что struct Test2 используется до определения. Я хочу объявить структуру вперед. Итак, я набрал struct Test2; раньше struct Test , но это не сработало. Есть ли решение?

Я знаю, что это возможно с функциями, так что, может быть, так должно быть и для структур?

Ответ №1:

Причина, по которой это невозможно, заключается в том, что когда вы помещаете конкретный struct Test2 объект внутрь struct Test , вам нужно знать размер Test2 , чтобы определить размер Test . Но вы не можете знать размер, не зная сначала полного определения.

Прямые объявления позволяют вам использовать указатель на тип, поскольку вы можете указать на что-то, не зная подробностей до более позднего времени. Хотя это может не полностью удовлетворить ваши потребности, вы могли бы сделать что-то вроде следующего с прямым объявлением:

 struct Test {
    int a;
    int b;
    struct Test2 *c;
};
  

Причина, по которой объявление функции работает, заключается в том, что оно сообщает вам все, что вам нужно знать о том, как взаимодействовать с функцией. Для этого вам не нужна сама функция.

Ответ №2:

Это работает, только если struct Test содержит указатель типа struct Test2* . Если она содержит экземпляр, struct Test2 должна быть определена раньше struct Test , потому что размер struct Test2 должен быть известен.