Pointer to struct in struct



  • Hallo zusammen

    struct Test
    {
      struct Test *Next;
      struct Test2 *Data;
    };
    

    Kann mir jemand erklären wieso der oben geschribe Code keinen Fehler verursacht?
    Wie weiss der Compiler wie er den nichbekannten Datentyp struct Test2 behandeln muss? Ist es dem Copiler egal von welchem Typ der Pointer ist und reserviert einfach 4Byte für ihn?
    Gruss



  • Ja. Schon "struct Test2" stellt eine Deklaration eines Strukturtypen dar. Allerdings als "unvollständigen" Typen, d.h. man kann mit dem Typen nur eingeschränkt arbeiten. Erlaubt ist AFAIK das Bilden von Pointern sowie das Deklarieren von Funktionen mit diesem Typ als Rückgabe:

    struct X;
    X* x;
    X f();
    /* X a; nicht erlaubt */
    

    Die gleiche Frage müsstest du dir übrigens für struct Test stellen, denn an der Stelle, wo du den Pointer deklarierst, ist die Deklaration der Struktur noch nicht abgeschlossen und der Typ daher genauso unvollständig.


Anmelden zum Antworten