AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pointer TList

Ein Thema von totti14 · begonnen am 15. Nov 2015 · letzter Beitrag vom 17. Nov 2015
Antwort Antwort
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#1

Pointer TList

  Alt 15. Nov 2015, 23:54
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

Hat da jemand ne Idee zu ?

Danke

Totti
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Pointer TList

  Alt 16. Nov 2015, 09:09
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
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Pointer TList

  Alt 16. Nov 2015, 09:33
Hallo Sherlock,
Da meckert Delphi auch.
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
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Pointer TList

  Alt 16. Nov 2015, 09:37
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.
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Pointer TList

  Alt 16. Nov 2015, 09:41
Also wird hier nach der Pointer Adresse sortiert ?
Aber so mag Delphi das ja nicht.

if NativeInt(ACode) < NativeInt(UniqueSortedCodeList[m]) then So funzt es.

Geändert von totti14 (16. Nov 2015 um 09:49 Uhr)
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#6

AW: Pointer TList

  Alt 17. Nov 2015, 01:17
Falls das wirklich Pointer sind, dann nimm bitte NativeUInt, oder das äquivalente und etwas kürzere UIntPtr.
Denn Speicheradressen sind vorzeichenlos (unsigned)!
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Pointer TList

  Alt 17. Nov 2015, 01:50
Da hast du Recht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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