DarthZiu schrieb:
Xin schrieb:
start ist nicht initialisiert, also führt "start->Next = NULL;" direkt mit der ersten Anweisung zum Abbruch des Programms.
Hab ja nicht geschrieben, dass das so lauffähig ist. Habs nur schnell hingeplottet.
Ich glaube, das verwirrt unseren C-Anfänger aber noch etwas, wenn er das ausprobiert.
Mir fiel da noch was auf, dass die Noskros Gedanken vielleicht etwas zu entwirren hilft:
Noskro schrieb:
Und das (a = a.next) aus Java gibt in C auch eine Fehlermeldung.
In der Liste steht als Datentyp für 'next' "list *". Du versuchst "list *" auf ein Element vom Typ "list" zu packen. Das sind unterschiedliche Datentypen!
Das ist etwa so, als würdest Du einen Ort mit einem Straßenschild gleichsetzen. Das eine ist der Ort, das andere nur ein Zeiger, dass man da lang fahren muss. Es sind also unterschiedliche Objekte (in einem einen leben Leute, das andere steht alleine in der Landschaft rum) und unterschiedliche Datentypen (Ort, Zeiger auf Ort). Das passt eben nicht.
Du willst Dich von Ort zu Ort hangeln (also von Referenz zu Referenz, weil Du willst ja nicht für jeden Test eine Million Leute umsiedeln um zu gucken, ob hinter diesem Ort noch einer wohnt - die Leute müssen ja dann auch umsiedeln, damit sie noch hinter dem Ort wohnen können, hinter den Du gucken willst )
Statt die Orte einzeln in Dein Blickfeld umzusiedeln, guckst Du einfach zum 'nexten' Ort rüber.
Du arbeitest also mit Zeigern (Ortschildern, "list *") statt mit Orten ("list").
Das vielleicht als kleine Gedankenstütze, was den den kleinen Unterschied("*") da ausmacht... Pointer ersparen vielen Orten überflüssige Umsiedlungen.
Übrigens, wenn ich 'list' oder 'struct List' schrieb ist in C 'struct list' gemeint... ich schreibe meine Datentypen grundsätzlich groß und arbeite in C++, wo kein struct mehr erforderlich ist.