www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kurze Frage zu C


Autor: Christoph Borowski (cborowski)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genauso.

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

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.
 ListItem *first_item = NULL; 

Wenn du jetzt ein neues Element erzeugst (malloc), dann kannst du deine 
globale Variable auf NULL abfragen.
 
if(first_item == NULL)
{
// ...
}
else
{
// ...
}

Das wärs dann eigentlich schon!

mfg
Andreas

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja... da war ich wohl 3min zu spät ;-)

Autor: Christoph Borowski (cborowski)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.