Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Was genau sind Pointer? (https://www.delphipraxis.net/22511-genau-sind-pointer.html)

Nalincah 18. Mai 2004 15:54


Was genau sind Pointer?
 
Wer kann mir genau sagen was Pointer sind? Oder mir zeigen wo ich ne Erklärung finde.
Ich weiß nur das der Pointer einer Variable auf die Adresse der jeweiligen zeigt.

alcaeus 18. Mai 2004 16:10

Re: Was genau sind Pointer?
 
Zitat:

Zitat von General2004
Wer kann mir genau sagen was Pointer sind? Oder mir zeigen wo ich ne Erklärung finde.
Ich weiß nur das der Pointer einer Variable auf die Adresse der jeweiligen zeigt.

Du beantwortest deine Frage doch selbst. Ein Pointer ist eigentlich eine normale Variable, an deren Adresse die Speicheradresse einer anderen Variablen liegt. Mit Hilfe von Dereferenzierungsoperatoren (ich hasse dieses Wort :roll:) kannst du dann wieder auf die eigentliche Variable zugreifen:
Delphi-Quellcode:
var
  i: Integer;
  pi: ^Integer;
begin
  i := 5;
  pi := @i;
  ShowMessage('Adresse '+IntToStr(pi)+'; Wert '+IntToStr(pi^));
end;
Ich hoffe das bringt dich weiter.

Christian Seehase 18. Mai 2004 16:11

Re: Was genau sind Pointer?
 
Moin Sebastian,

ich finde Deine Erklärung war schon fast vollständig.
Du müsstest bloss unterscheiden, ob die Variable selber der Pointer auf den Wert ist (z.B. bei Objekten oder Variablen vom Typ String), oder den Wert unmittelbar enhält (z.B. bei Variablen vom Typ integer).

Beispiel:

Delphi-Quellcode:
var
  iWork : integer;
  sWork : string;
  pWork : pointer;

begin
  iWork := $12345678;
  pWork := @iWork;

  // Jetzt enthält pWork die Adresse von $78, da diese Werte bei
  // Intel CPUs in umgekehrter Reihenfolge abgelegt werden, hier
  // als 78563412

  ShowMessage(IntToHex(Byte(pWork^),2));
  inc(integer(pWork));
  ShowMessage(IntToHex(Byte(pWork^),2));
  sWork := 'string';

  // sWork enthält den Pointer auf einen String, deshalb nur ein
  // Typecast.

  pWork := PChar(sWork);
  ShowMessage(Char(pWork^));

  // und bei HugeStrings liegt vor dem eigentlichen Inhalt die Länge
  // (integer Wert, deshalb vier Byte zurück)

  dec(integer(pWork),4);
  ShowMessage(IntToStr(integer(pWork^)));
end;

Pseudemys Nelsoni 19. Mai 2004 05:00

Re: Was genau sind Pointer?
 
http://www.delphipraxis.net/internal...hlight=pointer

glkgereon 22. Mai 2004 11:49

Re: Was genau sind Pointer?
 
wozu braucht man pointer?

ich mein, wenn man ne variable hat, auf die der pointer verweist, kann man auch direkt die variable verwenden, oder? :gruebel:

oder hab ich einen kapitalen denkfehler gebaut? :gruebel: :gruebel: :gruebel:

Chewie 22. Mai 2004 12:05

Re: Was genau sind Pointer?
 
Ein Vorteil ist z.B., dass man zwei Zeigervariablen haben kann, die auf einen Speicherbereich verweisen.
Und nur per Zeiger kann man Parameter an eine Funktion/Prozedur übergeben, die in der Funktion verändert werden und dessen Änderungen im Hauptprogramm erhalten bleiben.

alcaeus 22. Mai 2004 14:27

Re: Was genau sind Pointer?
 
Zitat:

Zitat von Chewie
Und nur per Zeiger kann man Parameter an eine Funktion/Prozedur übergeben, die in der Funktion verändert werden und dessen Änderungen im Hauptprogramm erhalten bleiben.

Na dann erklär mir mal wozu es var-Parameter in Delphi gibt? :gruebel: In C/C++ und anderen Programmiersprachen ist deine Aussage richtig, aber in Pascal/Object Pascal wohl eher nicht..

Chewie 22. Mai 2004 14:45

Re: Was genau sind Pointer?
 
Zitat:

Zitat von alcaeus
Na dann erklär mir mal wozu es var-Parameter in Delphi gibt? :gruebel:

Var-Parameter sind nur eine "Gefälligkeit" des Compilers. Folgende zwei Funktionen sind, was den erzeugten Maschinencode angeht, identisch:
Delphi-Quellcode:
function IAmAFunction(var Something: Integer): Boolean;
function IAmTheSameFunction(Something: PInteger): Boolean;

Phoenix 22. Mai 2004 14:50

Re: Was genau sind Pointer?
 
Zitat:

Zitat von Chewie
Folgende zwei Funktionen sind, was den erzeugten Maschinencode angeht, identisch:
Delphi-Quellcode:
function IAmAFunction(var Something: Integer): Boolean;
function IAmTheSameFunction(Something: PInteger): Boolean;

Ja. Sie sind es aber nicht mit:
Delphi-Quellcode:
function IAmAnotherFunction(Something: Integer): Boolean;
Das nur zur Verdeutlichung, weil in meinem Fall eine Kopie der originalen Variable angelegt wird, die innerhalb der Methode veränderbar ist, sich aber nicht auf den Wert der ursprünglichen Variable auswirkt.

glkgereon 22. Mai 2004 18:16

Re: Was genau sind Pointer?
 
Zitat:

Und nur per Zeiger kann man Parameter an eine Funktion/Prozedur übergeben, die in der Funktion verändert werden und dessen Änderungen im Hauptprogramm erhalten bleiben.
versteh ich nicht... :gruebel:

Chewie 22. Mai 2004 18:58

Re: Was genau sind Pointer?
 
Vielleicht als Code:

Delphi-Quellcode:
procedure ChangeSomething(var i: Integer);
begin
  i := i + 3;
end;

var
  i: Integer;
begin
  i := 10;
  ShowMessage('Vor dem Aufruf: ' + InttoStr(i)); //zeigt 10 an
  ChangeSomething(i);
  ShowMessage('Nach dem Aufruf: ' + InttoStr(i)); //zeigt 13 an
end;

Meflin 22. Mai 2004 19:31

Re: Was genau sind Pointer?
 
Zitat:

Zitat von glkbkk
wozu braucht man pointer?

ich mein, wenn man ne variable hat, auf die der pointer verweist, kann man auch direkt die variable verwenden, oder? :gruebel:

oder hab ich einen kapitalen denkfehler gebaut? :gruebel: :gruebel: :gruebel:

man braucht sie auch zwingend um einem thread eine variable zuzuweisen!

Pseudemys Nelsoni 23. Mai 2004 11:37

Re: Was genau sind Pointer?
 
ich weiss zwar nicht ob du bereits blind bist aber ich poste es gerne nochmal:

http://www.delphipraxis.net/internal...hlight=pointer

Sharky 23. Mai 2004 11:43

Re: Was genau sind Pointer?
 
Zitat:

Zitat von Pseudemys Nelsoni
ich weiss zwar nicht ob du bereits blind bist ...

Bitte etwas freundlicher im Ton sein! Danke :-D

Daniel 23. Mai 2004 11:45

Re: Was genau sind Pointer?
 
Zitat:

Zitat von Pseudemys Nelsoni
ich weiss zwar nicht ob du bereits blind bist aber ich poste es gerne nochmal

he.... immer mit der Ruhe. :!: Kein Grund, laut zu werden.

Pseudemys Nelsoni 23. Mai 2004 12:07

Re: Was genau sind Pointer?
 
hm, klingt wirklich "frech", sorry, war eigentlich nicht so gemeint. eigentlich sollte ein ":mrgreen: " da noch mit hinter - vergessen :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz