Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TIntegerlist - Erklärung der Add-Funktion (https://www.delphipraxis.net/92985-tintegerlist-erklaerung-der-add-funktion.html)

scrat1979 29. Mai 2007 21:28


TIntegerlist - Erklärung der Add-Funktion
 
Hallo zusammen,

ich habe im Netz eine schöne Unit namens IntegerList.pas gefunden. Diese funktioniert auch problemlos, nur möchte ich gerne die einfache Add-Funktion komplett verstehen. Vielleicht könnt ihr mir weiterhelfen... :

Delphi-Quellcode:
function TIntegerList.Add(Value: Integer): Integer;
begin
  Result:=FList.Add(Pointer(Value));
end;
Wieso wird hier die Funktion Pointer() aufgerufen. Es wird doch nur der über Value übergebene Wert in die Liste eingetragen, oder? Das Auslesen geschieht über ein einfaches FList[Index], d.h. hier wird doch die gespeicherte Zahl direkt aufgerufen. Warum würde in der Add-Funktion nicht einfach "Result := FList.Add(Value)" reichen?

Hoffe Ihr könnt mir bei meinem kleinen Verständnisproblem weiterhelfen!

Gute Nacht allerseits,

SCRaT

Bernhard Geyer 29. Mai 2007 21:32

Re: TIntegerlist - Erklärung der Add-Funktion
 
TIntegerList ist eine Ableitung von TList und diese arbeitet mit Pointern. Um beim Hinzufügen keine Warnung/Fehler zu bekommen wird ein harter Cast durchgeführt. Beim auslesen tritt auch ohne Cast kein Compiler-Fehler/Warnung auf.

Und nicht zu vergessen: unter Win32 sind der Datentyp Integer und Pointer jeweils 4 Byte groß.

DGL-luke 29. Mai 2007 21:34

Re: TIntegerlist - Erklärung der Add-Funktion
 
Hallo,

Pointer() ist keine FUnktion, sondern ein Typecast. Das heißt, du sagst dem Compiler, er soll bitte so tun, als wäre "Value" ein Pointer.

Das machst du deswegen, weil eine TList normalerweise eben Pointer speichert. Pointer ist aber dasselbe wie Integer - nur dass er normalerweise verwendet wird um eine Speicheradresse anzugeben.

Wenn du also einen Integer statt einem pointer übergibst, denkt der Compiler, du hast vielleicht einen Fehler gemacht und weist dich drauf hin. Deswegen musst du ihm sagen "Nein, das ist schon richtig so.".

Und das tust du, indem du auf den benötigten Typ castest.

scrat1979 30. Mai 2007 06:30

Re: TIntegerlist - Erklärung der Add-Funktion
 
ahhh!!

Vielen Dank. D.h., man "mißbraucht" hier eine TList um Integer zu speichern. Dann ist es klar. :thumb:

SCRaT

mkinzler 30. Mai 2007 09:12

Re: TIntegerlist - Erklärung der Add-Funktion
 
Was heißt hier mißbrauchen. Warum das Rad neu erfinden wenn es OO gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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