Pascal, Prozedur und globale verkettete Liste

Cepheid

Ensign
🎅Rätsel-Elite ’24
Registriert
Apr. 2011
Beiträge
221
Ich habe etwas gegoogelt, war aber unfähig die Antwort zu finden...

Also, es geht um folgendes:

Ich habe eine globale verkettete Liste als Typ mittels Zeiger und Record deklariert.
Wenn ich jetzt mit dieser Liste in einer Prozedur arbeite und dann eine weitere Prozedur
aufrufe, in der die Liste wiederum weiterbearbeitet wird - als Zwischenschritt -, ist dann
die verkettete Liste immer noch an derselben Stelle, d.h. der derselbe Zeiger?
D.h. kann ich einfach mit der globalen Variabeln diesen Typs sofort weiterarbeiten, ohne an dass Ende der verketteten Liste mittels einer Schleife (ala: while Variable <> NIL do) kommen zu müssen?

Und wenn nicht, wie muss ich es machen?
Einen andere Variable vom selben Typ "verkettete Liste" benutzen, der ich
den aktuellen Zeiger übergebe und deren Werte ich am Ende der Prozedur wieder an die
globale Liste übergebe? Ist in dem Fall die Methode mit der Schleife nicht besser?

Edit:
Habe nicht die Programmiersprache aus der Liste ausgewählt im Titel. Sorry.

Benutze Free Pascal.
 
Zuletzt bearbeitet:
Ohne jetzt tiefergehende Kenntnisse in Pascal zu haben, würde ich behaupten, dass dein erster Vorschlag funktioniert. Genau dafür sind doch globale Variablen da?!
Selbst wenn es nicht funktionieren SOLLTE, musst du ja nur die Variable an deine Prozedur übergeben (wie du schon richtig gesagt hast) und anschließend den neuen Zeiger wieder an die aufrufende Prozedur zurückgeben - sofern das in deinem Fall gewünscht ist.
 
Ja, dafür sind globale Variablen da, ich weiß.
Da es aber eine verkettete Liste mit Zeigern ist, bin ich mir nicht sicher.
Wenn ich nämlich diese verkettete Liste durchiterieren möchte, fange ich auch automatisch am Anfang an.
Zumindest war es bisher so.
Deswegen meine Unsicherheit, weil ich dachte, ich habe wieder den ersten Zeiger, wenn ich eine andere Prozedur aufrufe.
Natürlich kann ich auch die Adresse des aktuellen übergeben. Fragt sich nur noch, wie ich ihn dann zurückübergebe. Dafür bräuchte ich dann eine Funktion und keine Prozedur - gut, wäre kein Mehraufwand.

Nun, wie schon geschrieben, es sollte grundsätzlich gehen, aber ich wollte eben sicher sein. Das Programm wird etwas größer, daher wollte ich nicht von vornherein so einem Fehler aufsitzen.
Ich habe es jetzt aber sowieso wieder so gelöst wie am Anfang. Ich rufe die zweite Prozedur extra auf und benutze eine Schleife, die durchiteriert. Ist nämlich nicht langsamer in meinem Fall.

Danke für deine Hilfsbereitschaft.

Edit:
Um Bezug auf das "Ist nämlich nicht langsamer in meinem Fall." zu nehmen: Man könnte jetzt meinen, es wäre auch besser, etwas anderes als eine verkettete Liste zu nehmen, weil nicht gerade das schnellste, wenn es ums finden (oder sortieren) geht. Aber es handelt sich nur um Datenmengen im unteren 3-stelligen Bereich. Da ist es meiner Meinung nach nicht notwenig eine andere Datenstruktur zu nehmen. Und für einen Binärbaum wäre das Programm z.B. nicht geeignet, da er sehr geradlinig wäre.
 
Zuletzt bearbeitet:
Zurück
Oben