Typecast- Verständnisproblem mit Pointern in C



  • Hallo zusammen, ich habe eine kurze frage. Ich hoffe ihr könnt mir helfen.
    Ich habe folgende Strukturen:

    typedef struct elem{
        int value;
        struct Element *pNext, *pPrev;
    } Element;
    
    typedef struct que{
        Element *pTop, *pBottom;
        int size;
    } Queue;
    

    Und irgendwo in meinem Queue Programm habe ich eine Methode, mit der ich Elemente mit Hilfe eines übergebenen Index in meine Queue hängen kann. Dabei muss ich Pointer verbiegen:

    ((Element *)iterator->pPrev)->pNext = insert; // Wieso Cast noetig?
    

    So, wie ich die Zeile oben geschrieben habe, funktioniert mein Programm einwandfrei.
    Meine konkrete Frage lautet nun:
    Wieso muss ich an der Stelle Casten, obwohl pNext doch ein Zeiger auf Element ist?
    Wieso geht nicht folgendes (ohne Cast):

    iterator->pPrev->pNext = insert;
    

    PS: Der Pointer

    iterator
    

    ist vom Typ Element* und ich nutze diesen um durch meine Queue zu laufen.



  • hallohallohallo32 schrieb:

    typedef struct elem{
        int value;
        struct Element *pNext, *pPrev;
    } Element;
    

    Meintest du

    typedef struct elem{
        int value;
        struct elem *pNext, *pPrev;
    } Element;
    

    ?



  • Hallo, vielen Dank!
    Durch die Änderung brauche ich jetzt keinen Cast mehr.
    Aber wieso ist das so?- Warum musste ich vorher Casten? Ich dachte ich zeige auch so auf einen Pointer?



  • "struct Element" ist ein anderer Name als "Element", und "Element" ist ein Alias für "struct elem." Daher deklariert

    struct Element *pNext, *pPrev;
    

    nicht zwei Zeiger auf Element, sondern zwei Zeiger auf einen anderen (mir unbekannten) Typ struct Element, den du (oder etwas, das du benutzt) irgendwo vorher deklariert hast.


Anmelden zum Antworten