Autor Beitrag
Niels_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 117



BeitragVerfasst: Fr 19.03.04 14:32 
Ich verstehe nicht ganz den Sinn und Zweck eines Zeigers? Bei jedem Gebrauch eines Zeigers könnte ich doch eigentlich auch eine (Index-)Variable benutzen oder ähnliches - dieses ist doch viel einfacher zu verwenden...
Genauso unverständlich finde ich den Gebrauch des Zeigers wenn er auf sich selbst zeigt (Knoten.Nachfolger, wobei man Gebrauch von einem record macht) o.ä. Da is es doch viel einfacher und komfortabler ein dynamisches array zu benutzen, wo ich beliebig hin und her springen kann?!
Wo also liegt der Vorteil bei der Benutzung von Zeigern?? Bisher sehe ich da nur Nachteile...

Moderiert von user profile iconMotzi: Topic Verschoben
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 19.03.04 15:32 
Niels_ hat folgendes geschrieben:
Ich verstehe nicht ganz den Sinn und Zweck eines Zeigers? Bei jedem Gebrauch eines Zeigers könnte ich doch eigentlich auch eine (Index-)Variable benutzen oder ähnliches - dieses ist doch viel einfacher zu verwenden...

Zeiger haben durchaus ihre berechtigung, bzw. ohne sie würde nix gehn! zB. jede object referenz ist automatisch ein zeiger, du merkst es nur nicht, da sie sich so anfühlen, wie das object selbst. Nur wenn sie nil sind wird es so manchen schmerzlich bewusst. Zeiger sind halt die perfekten referenzen und avon braucht man in der egel jede menge :wink:
Zitat:

Genauso unverständlich finde ich den Gebrauch des Zeigers wenn er auf sich selbst zeigt (Knoten.Nachfolger, wobei man Gebrauch von einem record macht) o.ä. Da is es doch viel einfacher und komfortabler ein dynamisches array zu benutzen, wo ich beliebig hin und her springen kann?!

Ein array ist vielleicht praktischer für addressierung, aber nicht unbegingt schneller. Wenn man sowieso durch die gesammte liste iteriert dann hat ein linked list einen grossen vorteil: Die adresse eines elementes muss nicht extra ausgerechnet werden, da sie ganz einfach im 'next' pointer steht.

und hast du mal versucht in die mitte eines array ein element einzufügen? Das geht nämlich nicht ohne grosse kopier-vorgänge. Das ist bei einer linked list kein thema. Einfach ein paar zeiger-setzen fertig!

Zitat:

Wo also liegt der Vorteil bei der Benutzung von Zeigern?? Bisher sehe ich da nur Nachteile...

Was heist vorteile? ...ohne sie geht es nicht!

mfg.
maxiMe

_________________
mfg.
mâximôv
Niels_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 117



BeitragVerfasst: Fr 19.03.04 16:35 
Danke erstmal für die Antwort!

Okay, Zeiger sind also (fast) überall und sind schnell zu bearbeiten, aber wo ist dann genau der Unterschied zwischen Zeigern und Variablen? Ich habe damit so meine Schwierigkeiten...
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 19.03.04 16:39 
Schau mal auf www.manuel-poeter.de vorbei und wirf da mal einen Blick in mein Pointer-Tutorial.. vielleicht hilft dir das ein bisschen.. :)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.03.04 17:54 
Kurz zusammenfassend kann man sagen: Variablen beinhalten der Wert der an einer Speicheradresse steht, Zeiger beinhalten den Wert der Speicheradresse selber.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  p: Pointer;
begin
  i := 5;  // i hat den Wert 5.
  ShowMessage(IntToStr(i));
  p := @i;  // SpeicherAdresse von der Variablen i mit dem Wert 5.
  ShowMessage(IntToStr(Integer(p)));
end;
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 19.03.04 18:06 
Niels_ hat folgendes geschrieben:
... aber wo ist dann genau der Unterschied zwischen Zeigern und Variablen?


Zeiger sind durchaus auch variablen. Um an den eigentlichen wert zukommen muss man halt dereferenzieren.

Und noch ein anwendungsgebiet sind prozedurale pointer. Das sind im prinzip sprungaddressen, die du so aufrufen kannst, wie normale procedure, nur mit dem unterschied, dass sich das ziel dynamisch zuweisen lässt -> bestes beispiel dafür sind die schönen delphi-events (OnClick etc.) :wink:

_________________
mfg.
mâximôv
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 19.03.04 18:12 
maximus hat folgendes geschrieben:
bestes beispiel dafür sind die schönen delphi-events (OnClick etc.) :wink:

Da muss man dann nur aufpassen, dass ein Methodenzeiger (nichts andres sind die Delphi-Events) eigentlich Records sind die aus 2 Pointern bestehen..! Einmal die Adresse der Methode und einmal die Adresse des Objekts (für den Self-Pointer)!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 19.03.04 19:02 
Ich glaub so genau wollte Niels das garnicht wissen...aber klar sollte man das wissen, wenn man damit arbeitet :D

_________________
mfg.
mâximôv