AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf array

Ein Thema von blablab · begonnen am 4. Mär 2007 · letzter Beitrag vom 4. Mär 2007
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Pointer auf array

  Alt 4. Mär 2007, 15:50
Hallo!

ich hab mehrere dreidimensionale arrays (Konstanten):
array[0..a] of array[0..b] of array[0..c] of Double
jedoch ist a, b und c nicht immer gleich.

Und ich hätte gerne einen array of pointer, mit dem ich auf die einzelnen dreidimensionalen arrays zeigen kann.

Ich hab aber keine ahnung ob und wie das geht, denn ich muss dann die einzelnen Daten aus den arrays auslesen können und die jeweilige größe.

Weiß jemand, wie das geht?

Danke schonmal im Voraus!

Gruß
Simon
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Pointer auf array

  Alt 4. Mär 2007, 16:05
Hi,

vielleicht so:

Delphi-Quellcode:
T3DDoubleArray = Array[0..a] of Array[0..b] of Array[0..c] of Double; // wobei mir das mit dem a,b,c bisschen seltsam vorkommt...

P3DDoubleArray = ^T3DDoubleArray;

TP3DDoubleArray = Array of P3DDoubleArray;
? Oder hab ich dich falsch verstanden?

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Pointer auf array

  Alt 4. Mär 2007, 16:06
Hallo Simon,

du kannst die Funktionen High(), Low() und Length() auf einen Vektor anwenden:

Delphi-Quellcode:
const
  MAX_A = 3;
  MAX_B = 4;
  MAX_C = 5;
type
  TMatrix = array [0..MAX_A] of array [0..MAX_B] of array [0..MAX_C] of Double;
var
  m: TMatrix;
  aHigh, bHigh, cHigh: Integer;
begin
  aHigh := High(m);
  bHigh := High(m[0]);
  cHigh := High(m[0, 0]);
end;
Da du jeden Wert über seine Koordinaten in der Matrix direkt ansprechen kannst, wüsste ich nicht wofür du die Pointer brauchen könntest.

Grüße vom marabu
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Pointer auf array

  Alt 4. Mär 2007, 16:25
Hier ist ein konkretes Beispiel (ohne a,b und c):
ich hab die drei arrays

array1: array[0..19] of array[0..3] of array[0..2] of Double = (((...)));
array2: array[0..5] of array[0..2] of array[0..2] of Double = (((...)));
array3: array[0..20] of array[0..2] of array[0..2] of Double = (((...)));

und jetzt würde ich gerne alle arrays "zusammenlegen" in einerm array of pointer:

alle: array[0..2] of pointer = (array1, array2, array3);

Am schluss würde ich dann gerne die einzelnen werte auslesen können, zb:
if p[1][3][1][2] = 5.3 then ...
und ich würde gerne die dimensionen auslesen können, zb:
Length(p[2])
oder
Length(p[2][0])

wobei die fetten zeilen net funtionieren.

Was funktioniert ist
alle: array[0..2] of pointer = (@array1, @array2, @array3);
Wobei ich dann irgendwie nimmer weiß, wie ich auf die arrays zugreife...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Pointer auf array

  Alt 4. Mär 2007, 16:34
exakt so wie du es beschrieben hast, sollte es keine Möglichkeit geben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Pointer auf array

  Alt 4. Mär 2007, 16:52
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Pointer auf array

  Alt 4. Mär 2007, 17:03
Wie würdet ihr das dann machen?

Ich hab solche arrays

array1: array[0..19] of array[0..3] of array[0..2] of Double = (((...)));
array2: array[0..5] of array[0..2] of array[0..2] of Double = (((...)));
array3: array[0..20] of array[0..2] of array[0..2] of Double = (((...)));

und arbeite die so ab:

Delphi-Quellcode:
for i := 0 to Pred(Length(array1)) do begin
   for j := 0 to Pred(Length(array1[0])) do begin
      Koordinate(array1[i][j][0], array1[i][j][1], array1[i][j][2]);
   end;
end;

for i := 0 to Pred(Length(array2)) do begin
   for j := 0 to Pred(Length(array2[0])) do begin
      Koordinate(array2[i][j][0], array2[i][j][1], array2[i][j][2]);
   end;
end;

for i := 0 to Pred(Length(array3)) do begin
   for j := 0 to Pred(Length(array3[0])) do begin
      Koordinate(array3[i][j][0], array3[i][j][1], array3[i][j][2]);
   end;
end;

und da es insgesamt mehr als nur 3 arrays sind würde ich die gerne alle auf einmal abarbeiten. In etw so:

Delphi-Quellcode:
for i := 0 to 2 do begin
   for j := 0 to Pred(Length(alles[i])) do begin
      for k := 0 to Pred(Length(alles[i][j])) do begin
         Koordinate(alles[i][j][k][0], alles[i][j][k][1], alles[i][j][k][2]);
      end;
   end;
end;


Oder wenn ich aus diesen arrays
array1: array[0..19] of array[0..3] of array[0..2] of Double = (((...)));
array2: array[0..5] of array[0..2] of array[0..2] of Double = (((...)));
array3: array[0..20] of array[0..2] of array[0..2] of Double = (((...)));
diese hier mache
array1: array[0..57] of array[0..2] of Double = ((...));
array2: array[0..10] of array[0..2] of Double = ((...));
array3: array[0..40] of array[0..2] of Double = ((...));
Also, dass ich ein 2-dimensionales array draus mache und nur noch die 1. Dimension unterschiedlich ist, die zweite nicht.
geht es dann?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Pointer auf array

  Alt 4. Mär 2007, 17:20
ich würde anstelle von Arrays einfach klassen nehmen oder dynamische Arrays.
Nutze nächste mal bitte die Edit-Funktion.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Pointer auf array

  Alt 4. Mär 2007, 17:25
aber dann kann ich die Konstanten nicht mehr so einfach reinschreiben, oder?

a: array[0..2] of array[0..2] = ((1,2,3),(4,5,6),(7,8,9))
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Pointer auf array

  Alt 4. Mär 2007, 17:28
Zitat von blablab:
aber dann kann ich die Konstanten nicht mehr so einfach reinschreiben, oder?

a: array[0..2] of array[0..2] = ((1,2,3),(4,5,6),(7,8,9))
richtig!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 05: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