2016-07-12 16 views
0

Ist es möglich, die Dimension des Arrays zuweisbaren zu machen? (Nicht nur die Größe einer Dimension)Dynamische Abmessungen von Arrays

das heißt, etwas zu geben:

REAL, DIMENSION(:,:,: ... n), ALLOCATABLE :: array 

Ich meine das in einem Array von Arrays Sinn, aber können wir tun, bewahren sie Fortran ist leicht zugänglich Struktur Array? Es gab this, aber die erste Antwort befriedigt dieses Bedürfnis nicht. Die zweite Antwort verwendet Zeiger. Wird es funktionieren?

+2

Eine ähnliche Frage ist [diese] (https://stackoverflow.com/q/31974786). – francescalus

+0

Oder dieses: http://stackoverflow.com/q/7500920/2737715 –

+1

Dies ist so etwas wie eine FAQ. Aber was weniger häufig ist, ist ein zwingender Grund, diese Einrichtung zu benötigen. Welches ist deines ? –

Antwort

2

Nein, ein Array mit variablem Rang ist nicht möglich. Aus dem Fortran 2008 Standard, Cl. 2.4.6 "Array":

1 Ein Array kann bis zu fünfzehn Dimensionen und jedes Ausmaß in jeder Dimension haben. Die Größe eines Arrays ist die Gesamtzahl von Elementen, die gleich dem Produkt der Extents ist. Ein Array darf keine Größe haben. Die Form eines Arrays wird durch seinen Rang und seine Ausdehnung in jeder Dimension bestimmt und wird als ein Rang-Eins-Array dargestellt, dessen Elemente die Extents sind. Alle benannten Arrays sollen deklariert werden, und der Rang eines benannten Arrays wird in seiner Deklaration angegeben. Der Rang eines benannten Arrays, der einmal erklärt wurde, ist konstant; Die Extents können konstant sein oder während der Ausführung variieren.

[Hervorhebung von mir.]

Allerdings könnten Sie haben ein eindimensionales Array mit Ausmaß product(extent in each dimension) und Index in angemessener Weise die Elemente.

Sie könnten sogar mehrdimensionale Zeiger mit diesen 1D-Arrays verbunden haben. Dies würde die Indexierung für Sie übernehmen, ist aber (wie in der Literaturangabe angegeben) auf 15 Dimensionen für Standard Fortran beschränkt.

Verwandte Themen