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.