![]() |
Pointer TList
Hallo,
ich verstehe folgenden Pointer Vergleich nicht:
Delphi-Quellcode:
ACode und das result von UniqueSortedCodeList[] sind doch beides Pointer ?
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; Mal abgesehen vom Sinn und Zweck des Vergleichs den ich auch nicht verstehe :roll: Hat da jemand ne Idee zu ? Danke Totti |
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:
zielführend sein.
if ACode < UniqueSortedCodeList[m]^ then
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 |
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 |
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.
|
AW: Pointer TList
Also wird hier nach der Pointer Adresse sortiert ?
Aber so mag Delphi das ja nicht.
Delphi-Quellcode:
So funzt es.
if NativeInt(ACode) < NativeInt(UniqueSortedCodeList[m]) then
|
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)! |
AW: Pointer TList
Da hast du Recht.:thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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 by Thomas Breitkreuz