Normally, a structure type needs to be defined before you use it. But there are times when you need to refer to a structure type before its definition. In that case, use a forward declaration of the type, which is just the type heading followed by a semicolon. For example,
struct Cell;is a forward declaration for type Cell.
Forward declarations have a rather severe limitation. A forward declaration of type Cell allows you to use type Cell* before you define type Cell. But it does not allow you to use type Cell without a * before the definition of type Cell.
A definition of structure type T can refer to type T* without a forward declaration. For example, type definition
  struct ListCell
  {
    ListCell* next;
    int       item;
  };
      indicates that a value of type ListCell
      has two fields, one of which is a pointer
      to a ListCell.  We will see uses of this
      when looking at data structures.  It will also help
      to illustrate structure copying, which is next.
    
    
    Can a definition of structure type Kangaroo contain a field of type Kangaroo? Answer
What is the purpose of a forward declaration of a structure type? Answer