typedef und struct



  • Hallo,

    erstmal vorweg, ich muss eine lineare Liste programmieren mit folgende vorgegeben Structs.

    typedef
    		struct listel
    		{
    			double dwert;
    			struct listel* next;
    		}ListElement;
    typedef
    		struct
    		{
    			ListElement* start;
    			ListElement* end;
    			int cnt;
    		}ListHead;
    

    Wo ist der Unterschied zwischen diesen Structs? Warum gebe ich bei der oberen einen Typ and, und dann noch eine Variable? (Typ: listel, Variable: ListElement)
    und bei der unteren nur eine Variable? Wenn ich diese doch mit typedef deklariere dann mache ich doch bei der unteren struct "ListHead" zum Typ dieser Struct, aber was hat das typedef dann mit der oberen struct auf sich? Und wie kann ich auf die einzelnen Pointer zugreifen, vorallem auf struct listel* next?

    Untere struct:

    ListHead Listptr;
    
    	Listptr.start = NULL;
    	Listptr.end = NULL;
    	Listptr.cnt = 0;
    

    aber wie ich bei der oberen den next pointer auf NULL zeigen lasse, keine Ahnung, muss ich auch eine neue struct vom Typ ListeElement definieren?

    Vielen Dank im voraus!

    MfG

    zoro

    *Allen ein frohes Fest und einen guten Rutsch!



  • Bei der oberen Struktur wird innerhalb der Struktur selbst ja noch auf die Struktur zugegriffen (struct listel* next), daher wird ein Name bei der Struktur selbst benötigt (der Typedef-Name steht innerhalb der Strukturdeklaration noch nicht zur Verfügung).



  • zoro schrieb:

    typedef
    		struct listel
    		{
    			double dwert;
    			struct listel* next;
    		}ListElement;
    typedef
    		struct
    		{
    			ListElement* start;
    			ListElement* end;
    			int cnt;
    		}ListHead;
    

    Wo ist der Unterschied zwischen diesen Structs? Warum gebe ich bei der oberen einen Typ and, und dann noch eine Variable?

    Der Strukturname ("tag") ist normalerweise optional. Bei der ersten Definition wird er gebraucht, damit man innerhalb der Struktur einen Zeiger auf dieselbe Struktur ( struct listel* next ) deklarieren kann.

    BTW, der Typ heißt entweder struct listel oder ListElement , eine Variable wird hier nicht deklariert. Ich nehme an das weißt du, aber deine Begriffswahl ist nicht ganz eindeutig.

    Und wie kann ich auf die einzelnen Pointer zugreifen, vorallem auf struct listel* next?

    Wie immer?

    ListElement elem1, elem2;
    elem1.next = &elem2;
    elem2.next = NULL;
    

Anmelden zum Antworten