Pascal: Zeiger

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.

Pascal: Zeiger

Beitragvon RedGuy » 08.04.2017, 09:49

Hi !

Kennt sich jemand mit Pascal aus ?
Es dreht sich um pointer in Pascal:

Code: Ansicht erweitern :: Alles auswählen

var

Zeiger1,Zeiger2 : ^integer; {dies sind zwei Zeigervariablen}

begin
Zeiger1 := Zeiger2;
Zeiger2 := Zeiger1;
end.


Dieses Beispiel müsste doch zu einer zyklischen Abhängigkeit führen oder ?
Also Zeiger1 zeigt auf Zeiger2 und umgekehrt.

Den Inhalt, also das Ziel einer Zeigervariablen bekommt man ja z.B. mit Zeiger1^ bzw. Zeiger2^ .

oder verstehe ich da etwas falsch ?


Fragt mich nicht, warum ich mit Pascal programmiere :D ...

Gruss
RedGuy
RedGuy
Manuel Hofmann
 
Beiträge: 71
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: Pascal: Zeiger

Beitragvon Schrompf » 08.04.2017, 10:37

Pascal ist bei mir extrem lange her, aber ich vermute mal, das Konzept ist wie bei allen anderen auch. Und damit machst Du eigentlich folgendes:

- Du legst zwei Zeiger an, die ins Nirgendwo zeigen.
- Dann kopierst Du Z2 in Z1, also Z1 zeigt dann auf die selbe Stelle wie Z2.
- Danach kopierst Du Z1 in Z2, also zeigt Z2 dann an die selbe Stelle wie Z1.

Beide zeigen vorher wie nachher ins Nirgendwo. Nix mit zyklischer Abhängigkeit.

Stell Dir Zeiger vor wie kleine Zettel, auf denen "Buch SoUndSo, Seite 314, fünfte Zeile, drittes Wort" steht. Eine Zeigerzuweisung "kopiert" den Zeiger, wie als ob jemand das, was auf dem einen Zettel steht, auf dem zweiten Zettel abschreibt. Danach steht auf beiden Zetteln das selbe. Und das Wort, was auf den beiden Zetteln eigentlich benannt wird, ist von all dem nicht betroffen.
Häuptling von Dreamworlds. Baut an was Neuem. Hilft nebenbei nur höchst selten an der Open Asset Import Library mit.
Benutzeravatar
Schrompf
Thomas Ziegenhagen
Moderator
 
Beiträge: 3508
Registriert: 26.02.2009, 00:44
Wohnort: Dresden
Benutzertext: Lernt nur selten dazu

Re: Pascal: Zeiger

Beitragvon RedGuy » 08.04.2017, 11:08

Hi !

Ok !
Hab vergessen den Variablen etwas zu zuweisen.

Also entsteht hier eine zyklische Abhängigkeit:

Code: Ansicht erweitern :: Alles auswählen


var

Zeiger1,Zeiger2 : ^integer; {dies sind zwei Zeigervariablen}

begin
Zeiger1^ = 5; {eine Kleinigkeit zuweisen}
Zeiger2^ = 6;

Zeiger1 := Zeiger2;
Zeiger2 := Zeiger1;
end.



Gruss
Red
RedGuy
Manuel Hofmann
 
Beiträge: 71
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: Pascal: Zeiger

Beitragvon Schrompf » 08.04.2017, 11:56

Nein. Nix dergleichen. Ein Zeiger zeigt. Wortwörtlich. Anstatt einem Menschen, der mit seinem Zeigefinger auf einen einen Apfel auf dem Tisch zeigt, hast Du dann halt zwei Menschen, die jeweils mit ihrem Zeigefinger auf den selben Apfel zeigen. Du kannst auch fünf Leute nebeneinander stellen und auf den Apfel zeigen lassen - das interessiert den Apfel nicht.

Eine zyklische Abhängigkeit wäre, wenn der Apfel zurückzeigen würde. Du merkst schon am Typen, dass das nicht geht. Erfinde eine Struktur Bla, die einen ^Bla enthält, dann kannst Du zwei Instanzen davon anlegen und jeweils auf das Gegenüber zeigen lassen. Das wäre dann tatsächlich ne zyklische Abhängigkeit.
Häuptling von Dreamworlds. Baut an was Neuem. Hilft nebenbei nur höchst selten an der Open Asset Import Library mit.
Benutzeravatar
Schrompf
Thomas Ziegenhagen
Moderator
 
Beiträge: 3508
Registriert: 26.02.2009, 00:44
Wohnort: Dresden
Benutzertext: Lernt nur selten dazu

Re: Pascal: Zeiger

Beitragvon Goderion » 08.04.2017, 12:44

Ich bin irritiert.

RedGuy, auf der einen Seite arbeitest Du an für mich krass kompliziert klingenden Sachen wie z.B. viewtopic.php?t=4123, auf der anderen Seite "scheinst" Du nicht die Funktionsweise von Zeigern verstanden zu haben.
Wie Schrompf schon sagt, ein Zeiger zeigt nur.
Ein integer-Zeiger kann nur auf einen integer zeigen. Ein integer-Zeiger kann nicht auf einen integer-Zeiger zeigen.
Ein integer-Zeiger-Zeiger kann auf einen integer-Zeiger zeigen.
Wenn ich einem integer-Zeiger einen integer-Zeiger zuweise, dann übernimmt der integer-Zeiger nur die Adresse, auf die der andere integer-Zeiger zeigt.

Vielleicht kann dir das weiterhelfen:
http://wiki.freepascal.org/Pointer/de
http://www2.informatik.uni-halle.de/leh ... s6ptr.html
https://www.google.de/#q=pascal+zeiger

PS: Deine Facebook-Aussage "Das ist MEIN Forum!!!" mit Verweis auf zfx.info könnte man falsch interpretieren und denken, dass das Forum dir gehört, dass du der Hoster bist. Gehört dir dieses Forum oder ist das nur unglücklich ausgedrückt? Und warum immer so viele Ausrufezeichen?
Goderion
 
Beiträge: 28
Registriert: 16.09.2012, 12:02
Alter Benutzername: Goderion

Re: Pascal: Zeiger

Beitragvon RedGuy » 09.04.2017, 12:03

Hi !

also ich weiß schon was Zeiger sind. Nur kenne ich mich wohl mit der Syntax von Pascal noch nicht so aus :(, da ich gerade beim Aufrischen/Lernen bin.
Das bei facebook war wohl eher als Kommentar gedacht. Wohl etwas unglücklich ausgedrückt :( .

Gruss
RedGuy
RedGuy
Manuel Hofmann
 
Beiträge: 71
Registriert: 17.09.2002, 17:27
Wohnort: Rottweil

Re: Pascal: Zeiger

Beitragvon joggel » 10.04.2017, 08:11

Ich wollt schon sagen. Wir müssen uns da absprechen, nicht das das zu Widersprüchen kommt. Ich erzähle nämlich auch das ZFX *mein* Forum ist^^
...
Benutzeravatar
joggel
 
Beiträge: 1090
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: Pascal: Zeiger

Beitragvon antisteo » 14.04.2017, 20:26

RedGuy hat geschrieben:Hi !

Ok !
Hab vergessen den Variablen etwas zu zuweisen.

Also entsteht hier eine zyklische Abhängigkeit:

Code: Ansicht erweitern :: Alles auswählen


var

Zeiger1,Zeiger2 : ^integer; {dies sind zwei Zeigervariablen}

begin
Zeiger1^ = 5; {eine Kleinigkeit zuweisen}
Zeiger2^ = 6;

Zeiger1 := Zeiger2;
Zeiger2 := Zeiger1;
end.



Gruss
Red

RedGuy hat geschrieben:Hi !

also ich weiß schon was Zeiger sind. Nur kenne ich mich wohl mit der Syntax von Pascal noch nicht so aus :(, da ich gerade beim Aufrischen/Lernen bin.
Das bei facebook war wohl eher als Kommentar gedacht. Wohl etwas unglücklich ausgedrückt :( .

Gruss
RedGuy


Die beiden Quotes widersprechen sich. Du weißt definitiv nicht, was Zeiger sind.

Noch mal deinen Code zusammengefasst:
- du legst 2 Zeiger-Variablen an; deren Inhalt ist nicht initialisiert
- du vergleichst, ob Zeiger1 auf einen Integer zeigt, der auf den Wert 5 zeigt
- an dieser Stelle dürfte schon die erste Zugriffsverletzung passieren, da Zeiger1 irgendwo hin zeigt
- (es könnte aber auch sein, dass der Optimierer deinen sinnlosen Vergleich rauschmeißt, dann passiert natürlich nix)
- Auf derselben Zeile kommentierst du, dass du den Wert angeblich zuweisen willst ....

Ich gebe dir mal einen Beispiel-Code, der funktionieren würde:
Code: Ansicht erweitern :: Alles auswählen

var
integer1, integer2: integer;
Zeiger1,Zeiger2 : ^integer; {dies sind zwei Zeigervariablen}

begin
integer1 := 5;
integer2 := 6;
Zeiger1 := @integer1;
Zeiger2 := @integer2;

// jetzt dein komischer Code
Zeiger1 := Zeiger2;
Zeiger2 := Zeiger1;
end.

Und jetzt die Antwort auf deine Frage: nein, es gibt keine zirkuläre Abhängigkeit. Die Anweisungen können genau in dieser Reihenfolge abgearbeitet werden. Zeiger2 und Zeiger1 zeigen anschließend beide auf integer2.

Die Frage, die übrig bleibt: Was willst du mit deinem Code überhaupt programmieren? (btw: in modernem objektorientiertem Pascal braucht man Zeiger nicht wirklich mehr, wenn man alles sauber programmiert hat)
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
antisteo
 
Beiträge: 751
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem


Zurück zu Programmiersprachen, Quelltext und Bibliotheken

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste