![]() |
Re: Zeiger auf array
Zitat:
Der Höchstwert bei meinem Pointer auf das Array war immer 32767, obwohl das Original-Array (auf das mein Pointer zeigt) viel kürzer war (der Höchstwert war 15). Wie kann ich also einen "richtigen Pointer" auf ein statisches Array machen, bei dem auch die Länge mit der des Original-Arrays übereinstimmt? Mit PByteArray (erster Post) ging es ja nicht... |
Re: Zeiger auf array
Das mit der Länge liegt doch daran, daß in einem statischen Array keine Länge gespeichert wird, also es ist da unmöglich die Länge rauszubekommen.
Schau doch einfach mal in den generierten ASM-Code rein ... bei den Statischen Arrays wird LENGTH und HIGH nicht über eine Funktion ermittelt, sondern der Wert ist hardgecodet. Entweder du nimmst 'nen Record, wo die Länge mit eingetragen wird, oder halt dynamische Arrays, welche ja eine Längenangebe mit integriert haben. Beispiel für die Recordvariante:
Delphi-Quellcode:
dann mußt du halt einfach Len ganz am Anfang auf 16/256 setzen.
Palette4 = packed Record
Len: Integer; Data: Array[0..15] of Irgendwas; End; Palette4 = packed Record Len: Integer; Data: Array[0..255] of Irgendwas; End; Dann kannst du damit über einen Pointer auf alles zugreifen
Delphi-Quellcode:
PaletteX = packed Record
Len: Integer; Data: Array[0..255] of Irgendwas; // für 255 mindestendens den größtmöglichen Wert End; PPaletteX = ^PaletteX; |
Re: Zeiger auf array
Ja, ok das hätte ich mir so auch selber basteln können.
Nö, ich nehm dann einfach zwei dynamische Arrays. Dann brauch ich ja am Anfang einfach nur:
Delphi-Quellcode:
zu setzen.
SetLength(Palette4, 16);
SetLength(Palette8, 256); Zitat:
Delphi-Quellcode:
Das funzt!!!
var test: array[0..15] of Irgendwas;
{...} ShowMessage( IntToStr(Length(test)) ); <-- hier bekomme ich '16' angezeigt!!! Nur bei einem Pointer auf das Array klappts nicht mehr... |
Re: Zeiger auf array
Zitat:
|
Re: Zeiger auf array
Den hier?
Zitat:
|
Re: Zeiger auf array
Stimmt, wenn dann muss es schon "hartgecodet" heißen ;) .
"Hartgecodet" bedeutet, dass der Compiler deinen Length-Aufruf einfach statisch durch die obere Grenze des Arrays ersetzt. Bei Pointern kann er das schlecht machen, da dort ja diese Grenze dynamisch ist. |
Re: Zeiger auf array
Egal ob obere Grenze (High) oder Länge (Length) einens Array.
Das geht also beides nicht bei Pointern auf ein statisches Array sondern nur beim Aufruf des Arrays selbst??? |
Re: Zeiger auf array
genau, denn woher sollte er denn wissen wie lang das Array ist, auf das der Pointer zeigt ... im statischen Array jedenfalls wird nirgends die Länge gespeichert.
Das geht höchstens, wenn du den Pointer auf ein bestimmtes Array setzt:
Delphi-Quellcode:
Aber dann zeigt Length(P^) immer das an, auf was das Array A eingestellt ist und nicht das, auf was P wirklich zeigt.
Type A = Array[0..15] of Irgendwas;
P = ^A; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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