AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Auf welches Array-Element zeigt der Pointer?
Thema durchsuchen
Ansicht
Themen-Optionen

Auf welches Array-Element zeigt der Pointer?

Ein Thema von ichbins · begonnen am 24. Dez 2005 · letzter Beitrag vom 24. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#1

Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 12:31
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;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 12:40
Wie wäre es mit
Delphi-Quellcode:
var
  a:array of byte;
  pointer:^byte;
  i : Integer;
begin
  randomize;
  setlength(a,random(100));
  i := random(length(a));
  pointer:=@a[i];
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 12:44
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:
for i := low(a) to high(a) do
  begin
    if (pointer = @a[i]) then
      begin
        pos := i;
        break;
      end;
  end;
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)

Delphi-Quellcode:
startPos := Integer(@a[0]);
pos := (startPos - Integer(p)) div sizeOf(a[0]);
Warum genau sind eigentlich deine Array-Elemente Unterschiedlich groß?

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 12:45
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;
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#5

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 12:45
  ShowMessage(inttostr(integer(pointer) - integer(a))); ?
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 12:55
Zitat:
Integer(Pointer)-Integer(@a[0]);
geht aber nur wenn jedes Element genau 1 Byte groß ist.

die einzelnen Elemente sind Klassen, die wiederum array-of-Typen und strings enthalten.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 13:01
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 von ichbins:
die einzelnen Elemente sind Klassen, die wiederum array-of-Typen und strings enthalten.
Hier könntest du meinen Code (mit sizeOf) wieder verwenden, wenn es sich immer um den selben Typ von Klasse handeln würde. Dynamische Arrays (wie z.B. Strings) werden in der Klasse auch nur als Zeigen auf das erste Element gespeichert.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 13:06
stimmt...
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 13:12
Hallo? Ich hab weiter oben gezeigt, wie einfach du den Index ermitteln kannst. Dazu brauchts kein großes Nachdenken und kein Durchsuchen des Arrays.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: Auf welches Array-Element zeigt der Pointer?

  Alt 24. Dez 2005, 13:23
@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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:50 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