Forum: Mikrocontroller und Digitale Elektronik Kurze Frage zu C


von Christoph B. (cborowski)


Lesenswert?

Hallo zusammen,

ich habe eine kurze Frage bzgl. C-Programmierung.

Folgendes Szenario:
Ich will eine doppelt verkettete Liste implementieren, deren Elemente 
mittels eines struct definiert sind. Darüber hinaus gibt es eine globale 
Variable, die immer auf das erste Element der Liste zeigt. Beim Start 
des Programms gibt es noch keine Elemente. Diese werden zur Laufzeit 
(nach ein paar Benutzereingaben) erzeugt und an die Liste gehängt.
Das Anhängen passiert in einer Funktion, die auf die oben genannte 
globale Variable zugreift. Zuerst soll geprüft werden, ob der globalen 
Variable bereits ein Element zugewiesen ist. Wenn nein, dann wird gerade 
das erste Element in die Liste eingefügt => globale Variable bekommt das 
Element zugewiesen. Wenn ja, dann existieren bereits Elemente => 
Element, auf das die globale Variable verweist und das gerade erzeugte 
Element miteinander verketten und der globalen Variable das gerade 
erzeugte Element zuweisen.

So weit so gut, aber wie prüfe ich in C ab, ob meiner globalen Variable 
bereits ein Element zugewiesen ist? In Java kann ich Attribute und 
Variablen mittels ==null bzw. !=null abfragen, ob sie ein Objekt 
referenzieren oder nicht. Wie wird sowas in C gemacht?

Für Links, kurze Denkanstöße oder Tipps wäre ich sehr dankbar...

Gruß
Christoph

von Simon K. (simon) Benutzerseite


Lesenswert?

Genauso.

Einfach den globalen Pointer, der auf das erste Element zeigt auf 0, 
bzw. auf NULL setzen.

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

Hi

In C wird das im Grunde genauso gemacht. Deine globale Variable sollte 
ein Pointer sein. Am Beginn deines Programms wird der Pointer auf NULL 
initialisiert. D.h. du lässt denn Pointer quasi auf die Adresse 0 
zeigen.
1
 ListItem *first_item = NULL;

Wenn du jetzt ein neues Element erzeugst (malloc), dann kannst du deine 
globale Variable auf NULL abfragen.
1
 
2
if(first_item == NULL)
3
{
4
// ...
5
}
6
else
7
{
8
// ...
9
}

Das wärs dann eigentlich schon!

mfg
Andreas

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

Tja... da war ich wohl 3min zu spät ;-)

von Christoph B. (cborowski)


Lesenswert?

Ok, danke an alle! das ist ja wirklich einfach. Jetzt kann es 
weitergehen :)

Gruß & noch ein paar schöne letzte Tage im alten Jahr...
Christoph

von Unbekannter (Gast)


Lesenswert?

Wenn Du schon die eine-millionste Implementiertung einer Linked-List 
bauen willst (hoffentlich nur zu Übungszwecke), dann denke auch mal über 
"Sentinels" nach. Z.B.:

  http://www.brpreiss.com/books/opus4/html/page88.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.