Delphi-PRAXiS
Seite 1 von 2  1 2      

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.
Seite 1 von 2  1 2      

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