AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Weitergabe von mehrfach Array, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Weitergabe von mehrfach Array, wie?

Ein Thema von MET · begonnen am 3. Jul 2019 · letzter Beitrag vom 4. Jul 2019
 
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
496 Beiträge
 
Delphi 12 Athens
 
#5

AW: Weitergabe von mehrfach Array, wie?

  Alt 4. Jul 2019, 05:10
Naja, bedingt. "array of Extended" funktioniert leider auch nur sehr bedingt. Im Rückgabewert der Funktion beispielsweise nämlich nicht.
Der Grund, warum das so nicht funktioniert ist, dass es im Grunde (obwohl ähnlich bzw gleich deklariert) drei Arten von Arrays für den Compiler gibt:
  1. Statische Arrays, die auf dem Stack abgelegt werden können, da ihre Größe zur Kompilierzeit bereits feststeht
  2. (Einfache) dynamische Arrays, deren Größe bei der Erzeugung festgelegt wird und die somit auf dem Heap gespeichert werden müssen; sie verhalten sich ähnlich wie Zeiger auf statische Arrays mit der besonderheit, dass sie selber die Eigenschaften eines Arrays (Referenzzählung, Typpenprüfung, ...) besitzen
  3. (Offene) Parameter-Arrays, die zwar immer dynamisch sein müssen, dafür aber auch "untypisiert" sein dürfen*

*was sie natürlich nur "scheinbar" sind. (In Wahrheit sind es offene arrays von TVarRec-Objekten)

Offene Arrays sind nicht exakt das gleiche wie dynamische Arrays und somit auch nur teilweise kompatibel. Die Konvertierung von einem dynamischen Array in ein offenes Array verläuft bei der Parameterübergabe implizit.
Offene Arrays müssen eindimensional sein. Es sind intern keine "arrays" sondern Zeiger auf Records, in denen der Zeiger auf das erste Element, sowie die Länge gespeichert ist. Hier sind wir auch schon bei dem Haken: Es gibt keinen Support für die Dimensionen.
Wenn du gezielt willst, dass keine offenen Arrays erzeugt werden, sondern echte (dynamische) arrays übergeben werden, dann musst du einen expliziten Typen dafür deklarieren. Bei "array of Extended" denkt der Compiler, du wolltest einen offenen Array-Parameter deklarieren. Bei "TArray<Extended>" oder "TExtendedArray" weiß er, dass es dieser spezifische Typ sein soll (nämlich ein dynamisches Array mit Extended-Werten). Beim Funktions-Ergebnistyp versucht er dies auch, allerdings können offene Arrays nicht zurückgegeben werden, weshalb er einen Fehler anzeigt. Hier müsstest du immer den Alias benutzen.

Entschuldigung, falls ich dich verwirrt habe. Nur, falls es dich im Detail interessiert, warum das so nicht geht.
Dennis
  Mit Zitat antworten Zitat
 


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 15:33 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