Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Pointer TList (https://www.delphipraxis.net/187282-pointer-tlist.html)

totti14 15. Nov 2015 22:54

Pointer TList
 
Hallo,
ich verstehe folgenden Pointer Vergleich nicht:

Delphi-Quellcode:
procedure AddToUniqueList(ACode: Pointer; UniqueSortedCodeList: TList);
var l,m,r: integer;
begin
  l:= 0;
  r:= UniqueSortedCodeList.Count-1;
  m:= 0;
  while r >= l do begin
    m:= (l+r) shr 1;
    if ACode < UniqueSortedCodeList[m] then   // << [dcc32 Fehler] scanner.pas(862):  E2015 Operator ist auf diesen Operandentyp nicht anwendbar
      r:= m-1
    else if ACode > UniqueSortedCodeList[m] then
      l:= m+1
    else
      exit;
  end;
  if (m < UniqueSortedCodeList.Count) and (ACode > UniqueSortedCodeList[m]) then
    inc(m);
  UniqueSortedCodeList.Insert(m,ACode);
end;
ACode und das result von UniqueSortedCodeList[] sind doch beides Pointer ?
Mal abgesehen vom Sinn und Zweck des Vergleichs den ich auch nicht verstehe :roll:

Hat da jemand ne Idee zu ?

Danke

Totti

Sherlock 16. Nov 2015 08:09

AW: Pointer TList
 
Am Ende sind alles Pointer, und dann aber auch doch wieder nicht. Wenn Du etwas als Pointer nutzen möchtest, ohne den Komfort der Typsicherheit, dann musst Du das auch explizit tun. Dazu gibt es die Operatoren ^ und @. In Deinem Fall dürfte also
Delphi-Quellcode:
if ACode < UniqueSortedCodeList[m]^ then
zielführend sein.

Ich weiss, wir reden nicht über Sinn und Unsinn. Aber auch Delphi ist modern genug, um auf die Verwendung von Pointern verzichten zu können.

Sherlock

totti14 16. Nov 2015 08:33

AW: Pointer TList
 
Hallo Sherlock,
Da meckert Delphi auch.
Delphi-Quellcode:
if ACode < UniqueSortedCodeList[m]^ then // [dcc32 Fehler] linkscanner.pas(862): E2008 Inkompatible Typen

Das ist ein Codestück aus Lazarus was ich zweckentfremden wollte.

Totti

Dejan Vu 16. Nov 2015 08:37

AW: Pointer TList
 
Der Code fügt eine Adresse per binary search in eine Liste ein. Die Liste ist hinterher anhand der Ordnung (Pointer, <,>,=) sortiert. Es kommt auf die Implementierung der Vergleichsoperatoren an. Eine Dereferenzierung kann nicht stattfinden, da die Pointer ja untypisiert sind.

totti14 16. Nov 2015 08:41

AW: Pointer TList
 
Also wird hier nach der Pointer Adresse sortiert ?
Aber so mag Delphi das ja nicht.

Delphi-Quellcode:
if NativeInt(ACode) < NativeInt(UniqueSortedCodeList[m]) then
So funzt es.

SMO 17. Nov 2015 00:17

AW: Pointer TList
 
Falls das wirklich Pointer sind, dann nimm bitte NativeUInt, oder das äquivalente und etwas kürzere UIntPtr.
Denn Speicheradressen sind vorzeichenlos (unsigned)!

totti14 17. Nov 2015 00:50

AW: Pointer TList
 
Da hast du Recht.:thumb:


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