Delphi-PRAXiS

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

Pseudemys Nelsoni 11. Mai 2004 05:00


Pointer
 
:oops:

Schon wieder so ein Thread von mir...naja....ich wills langsam endlich mal kapieren :cry:

meinen alten thread finde ich nichtmehr, deswegen poste ich mal hier....

Ok, ich weiss wie zeiger funktionieren und was sie tun...aber ich finde keine Verwendung für sie. Überall wo ich sehe das Pointer benutzt werden können, klappt es genausogut mit einer "normalen" Variable, genauso mit einer verketteten Liste...statt der könnte ich genauso ein dynamisches arrays benutzen.

Kann mir jemand einen kleinen Codeschnippsel geben wo ein pointer verwendet wird wo man auch garkeine andere möglichkeit hat als diesen zu verwenden?


Das Klassen-Kapitel in meinem Buch war wesentlich leichter...


mfg

Sharky 11. Mai 2004 05:53

Re: Pointer
 
Hai Pseudemys Nelsoni,

Zitat:

Zitat von Pseudemys Nelsoni
...Kann mir jemand einen kleinen Codeschnippsel geben wo ein pointer verwendet wird wo man auch garkeine andere möglichkeit hat als diesen zu verwenden?...

Schaue Dir doch mal die Eingenschaft Data von z.B. einem TListItem an. Das ist auch "nur" ein Pointer ;-)
Diese verwende ich zum Beispiel um die informationen zu einem Datensatz zu speichern den ich aus einer Datenbanktabelle geholt habe und in einem TListView anzeige.

fiasko 11. Mai 2004 06:21

Re: Pointer
 
Hallo,

jede Instanz einer Klasse (Objekt) ist am Ende ein Pointer - das gilt so für ziemlich alle Ressourcen die du zur Laufzeit anforderst - den da kann zur Compilezeit ja noch keine Adresse festgelegt werden wo das mal im Adreßraum liegen wird.

Der Typ string z.B. ist auch nur ein Pointer auf einen nullterminierten String (PChar) mit noch einer zusätzlichen Längenangabe beim Offset -2 (?). Die gibt's also überall - Delphi vermurkst das nur teilweise :cry:

SirThornberry 11. Mai 2004 06:32

Re: Pointer
 
Dein Argument das man anstelle von einer verketteten Liste auch ein Array nehmen kann ist nicht ganz richtig. Wenn du ein array nich global definierst kommtn man da ziemlich schnell an die grenze so wo das array nix mehr aufnehmen kann. Außerdem ist die arbeit mit einem array unperformanter. Wenn man ein dynamiches array erweitern will muss man jedesmal setlength aufrufen was nicht gerade performant ist. Bei TList (verkettete Liste) ist das viel performanter...

ein weiteres Beispiel wo ich zum Beispiel ohne pointer nicht auskäme:
Ich habe eine visuelle Playliste (zum anklicken etc.) und mehrere 100 nonvisuelle. Wenn ich jetzt für jede nonevisuelle liste eine visuelle erstellen müsste wäre das ziemlich unperformant. So brauch ich bei meiner Komponente nur "DataSourcelist := Playliste01" ausführen (also den pointer auf meine andere playliste setzen) und schon hat meine visuelle Liste andere Items. Ohne Pointer wäre das grausam.

Jens Schumann 11. Mai 2004 07:43

Re: Pointer
 
Zitat:

Zitat von SirThornberry
Wenn du ein array nich global definierst kommtn man da ziemlich schnell an die grenze so wo das array nix mehr aufnehmen kann.

:gruebel: :gruebel: :gruebel:

SirThornberry 11. Mai 2004 07:58

Re: Pointer
 
@Jens Schumann: Wenn das Array member einer Klasse ist dann kommt wenn ich mich recht erinnere bei großen Datenmengen irgendwann ein Stack overflow,hab allerdings gelesen das dies nich der fall sein soll wenn man das array global definiert (keine ahnung ob das wirklich so ist). Ich musste vor einiger zeit mein programm so ziemlich komplett um strukturieren weil ich erst mit dynamichen array gearbeitet hab und das programm inzwischen so viel daten zu verarbeiten hat das dies fehl schlägt. Der Vorteil des umstellens ist der performancegewinn...

Jens Schumann 12. Mai 2004 07:11

Re: Pointer
 
@SirThornberry vielen Dank für die Antwort.
Da ich grundsätzlich nicht mit dyn. Arrays arbeite ist mir das wohl noch nicht aufgefallen.

Christian Seehase 12. Mai 2004 20:19

Re: Pointer
 
Moin Sir Thornberry,

nur mal so aus Interesse:
Hast eine Idee woher Du diese Info haben könntest (so ungefähr)?

Ich habe schon dynamische Arrays als Felder einer Klasse verwendet, die dann hunderttausende Einträge erhalten hat, ohne, dass es zu einem Stackoverflow gekommen wäre (und ohne dass ich den Standardwert für den Stack verändert hätte).
Gross ist natürlich auch relativ ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.

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