![]() |
Auf welches Array-Element zeigt der Pointer?
Hallo,
wie kann ich das herausfinden? ich habe z.B. ein array of byte, und einen pointer, der auf ein Element in diesem Array zeigt. Wie kann ich ermitteln, auf welches Element der Pointer zeigt?
Delphi-Quellcode:
var
a:array of byte; pointer:^byte; begin randomize; setlength(a,random(100)); pointer:=@a[random(length(a))]; //wie krieg ich jetzt raus auf welche Element von a der pointer zeigt? Die Arrayelemente sind alle unterschiedlich groß. end; |
Re: Auf welches Array-Element zeigt der Pointer?
Wie wäre es mit
Delphi-Quellcode:
:zwinker:
var
a:array of byte; pointer:^byte; i : Integer; begin randomize; setlength(a,random(100)); i := random(length(a)); pointer:=@a[i]; |
Re: Auf welches Array-Element zeigt der Pointer?
Hi,
warum genau willst du das denn wissen? Na ja, am einfachsten vergleichst du einfach die einzelnen Elemente (bzw. deren Adresse) mit dem Pointer.
Delphi-Quellcode:
Da ein Array immer als ein Speicherbereich alloziert wird, kannst du natürlich auch einfach schauen, wieviel Byte du von der Startadresse weg liegst (klappt dann allerdings nur bei gleich großen Array-Elementen)
for i := low(a) to high(a) do
begin if (pointer = @a[i]) then begin pos := i; break; end; end;
Delphi-Quellcode:
Warum genau sind eigentlich deine Array-Elemente Unterschiedlich groß?
startPos := Integer(@a[0]);
pos := (startPos - Integer(p)) div sizeOf(a[0]); Gruß Der Unwissende |
Re: Auf welches Array-Element zeigt der Pointer?
Wie wäre es mit *tada* Arithmetik?
Delphi-Quellcode:
var
a:array of byte; pointer:^byte; elem: integer; begin randomize; setlength(a,random(100)); pointer:=@a[random(length(a))]; //wie krieg ich jetzt raus auf welche Element von a der pointer zeigt? Die Arrayelemente sind alle unterschiedlich groß. // so sollts gehen: elem := Integer(Pointer)-Integer(@a[0]); end; |
Re: Auf welches Array-Element zeigt der Pointer?
Delphi-Quellcode:
?
ShowMessage(inttostr(integer(pointer) - integer(a)));
|
Re: Auf welches Array-Element zeigt der Pointer?
Zitat:
die einzelnen Elemente sind Klassen, die wiederum array-of-Typen und strings enthalten. |
Re: Auf welches Array-Element zeigt der Pointer?
Dann aber nochmal die Frage, warum machst du dass so? Also warum hängst du verschiedene Klassen in ein Array?
Es wäre viel Sinnvoller einfach ein Array der Referenzen (Pointer auf die jeweilige Instanz) zu speichern. Die sind dann immer 4 Byte groß (bei einem 32-Bit BS natürlich) und da kannst du dann sehr leicht sehen worauf du gerade zeigst. Es macht imho wenig Sinn ein Array aus verschiedenen Elementen zu erstellen. Zitat:
|
Re: Auf welches Array-Element zeigt der Pointer?
stimmt... :oops:
|
Re: Auf welches Array-Element zeigt der Pointer?
:roll: Hallo? Ich hab weiter oben gezeigt, wie einfach du den Index ermitteln kannst. Dazu brauchts kein großes Nachdenken und kein Durchsuchen des Arrays. :roll:
|
Re: Auf welches Array-Element zeigt der Pointer?
@leddl Hatte es so verstanden, dass seine Frage sich mehr auf's generelle Ermitteln eines Elements, von dem nur die Adresse bekannt ist (und dass es zu einem best. Array gehört) bezieht. Dann hättest du einfach nicht den (pseudo)zufälligen Index...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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-2025 by Thomas Breitkreuz