Ein Array ([], ) ist in der Informatik eine Datenstruktur-Variante, mit deren Verwendung „viele gleichartig strukturierte Daten […] verarbeitet werden sollen“.Programmieren in Fortran (archiviert), Uni Bayreuth Der Zugriff auf bestimmte Inhalte des Arrays erfolgt mit Hilfe von Indizes.

Begriffe Synonyme Bezeichnung ‚Feld‘ Zum Teil wird für Arrays auch der Ausdruck Feld (aus , eine weitere mögliche Bedeutung von ‚Array‘) verwendet.

Dieser Ausdruck (wie auch Datenfeld) gilt jedoch im Allgemeinen als elementares, Daten beschreibendes Konstrukt; es wird im Quelltext eines Computerprogramms zur Definition von oder Bezugnahme auf benannten Speicherplatz verwendet. Ein Feld in diesem Sinn ist kein Datentyp, sondern es hat einen Datentyp, und es ist unerheblich, ob es Teil eines Arrays oder einer übergeordneten Datenstruktur, z. B. Verbund oder Record ist oder ein singulär definierter Speicherbereich.

Diese beiden sich wesentlich unterscheidenden Bedeutungen von ‚Feld‘ sind und waren immer wieder Anlass zu zum Teil heftigen Diskussionen.Beispiel für „heftige Diskussion“ auf leo.org

„Der englische und gängigere Begriff ist Array“.Ein C-Tutorial. C-how-to

Weitere Synonyme Gleichbedeutende Synonyme für Array sind, im Wesentlichen geprägt aus dem Einsatz in verschiedenen Programmiersprachen, deren Terminologie und Entstehungsgeschichte oder durch Übersetzung aus dem Englischen: Tabelle (Table), Vektor, Reihe, Reihung, Aufstellung, Bereich, Gate Array, Matrix u. a.

Auch die verschiedenen Elemente eines Arrays werden mit unterschiedlichen Ausdrücken bezeichnet: Element, Komponente, Unterfeld, Feldelement, indizierte Variable – und zum Teil ebenfalls Feld oder Datenfeld. Dabei können als Untermenge des Arrays entweder die über einen bestimmten Indexwert adressierten Daten verstanden werden (oft als ‚vertikale‘ Dimension des Arrays bezeichnet) oder innerhalb einer solchen Struktur definierte Datenfelder (‚horizontale‘ Sicht).

Indizes Zur Adressierung der Inhalte eines Arrays wird ein ‚Index‘ verwendet.

Der Index wird bei ‚Standard-Arrays‘ in höheren Programmiersprachen als Ganzzahl angegeben.

‚Assoziative Arrays‘ erlauben dagegen die Verwendung von beliebigen, nicht notwendigerweise numerischen, aber eindeutigen Schlüsselwerten als Indizes.

Bei mehrdimensionalen Arrays gibt es für jede Dimension einen unabhängigen Index und eine unabhängige Länge.

Bei streng strukturierten Programmiersprachen wird die Zulässigkeit eines Indexes zur Laufzeit geprüft, damit der Zugriff auf ungültige Speicherbereiche unterbunden wird.

Sprachspezifische Unterschiede Grundsätzlich können Arrays in den meisten Programmiersprachen angelegt und verarbeitet werden. Neben den unterschiedlichen Ausdrücken, die sich in einzelnen Sprachen entwickelt haben, werden Arrays von den Compilern der Programmiersprachen, zum Teil auch in verschiedenen Sprachversionen, unterschiedlich umgesetzt und unterstützt. Beispiele:

Unterscheidung Standardarray / assoziatives Array / nur Listen durch den Compiler der Programmiersprache Anzahl der möglichen Dimensionen (in-sich mehrdimensionale Arrays, Array-in-Array) Maximale Array-Größe Adressierung der Elemente (ab 0, ab 1 oder ab einem beliebigen Index, gegebenenfalls auch beginnend mit einem negativen Index) Anzahl der Unterfelder: fix, dynamisch/variabel je Dimension Format und Länge der Elementarfelder: einheitlich im ganzen Array, einheitlich je Dimension/Variable, individuell Unterstützung für Operationen auf Datenmengen im Array: nur auf Elemente, beliebige Strukturen, ganze Dimension, ganzes Array Wertzuweisung für Array-Elemente: Per Deklaration, durch Zuweisungsbefehle Adressierungsverfahren: Der Index ist eine Ganzzahl-Variable (die konkrete Adresse im Array wird bei Bezugnahme berechnet) Der Index ist ein Direktwert (die Adresse im Array wird zur Compilezeit berechnet) Der Index enthält den relativen Abstand zum Array-Beginn Der Index ist ein Suchschlüssel Zugehörige Berechnungen können manuell programmiert werden oder werden durch den Compiler teilweise oder vollständig automatisch durchgeführt.

In den meisten Assemblersprachen ist die Verarbeitung von Arrays zwar möglich, sie wird aber syntaktisch meist nicht speziell unterstützt und muss vom Programmierer explizit „nachgebaut“ werden: Der Programmierer implementiert Array-Elemente so wie auch andere Variablen, reserviert zusätzlich den Speicherplatz für n weitere Ausprägungen. Zur Verarbeitung ermittelt er die Position relevanter Elemente mit geeigneten Algorithmen, zum Beispiel in einem Indexregister, und adressiert sie mit aufgabenspezifischen – nicht speziell auf die Array-Verarbeitung ausgerichteten – Anweisungen.

Beim Deklarieren werden Arrays in einer sprachspezifischen Syntax formuliert. Beispiele: NameX (100) (Datenname plus Anzahl der Array-Elemente in runder Klammer): PL/I NameX [100,...] (Datenname plus je Dimension die Anzahl der Array-Elemente in einer eckigen Klammer): C#msdn.microsoft.com Microsoft NameX [][] (Datenname plus je Dimension in eckigen Klammern die Anzahl der Array-Elemente): C/C++,Martin-Luther-Universität Halle-Wittenberg: Javahomeandlearn.co.uk Java NameX array (100) (Schlüsselwort 'array' plus Anzahl der Elemente in runder Klammer): Modula-2 NameX occurs 100. (Schlüsselwort 'OCCURS' plus Anzahl der Elemente plus ggf. Klausel ‚Indexed by‘): Cobol Dim NameX (100,...) (Schlüsselwort 'Dim' plus Variablenname plus Anzahl Elemente je Dimension (in einer runden Klammer)): VBA, 'Dimension' bei Fortran90/95

Array-Varianten mini|Standardarray vs Assoziatives Array vs 'Feld' als 'Datenfeld' Standard-Array Mit Hilfe eines Arrays können die Daten eines üblicherweise einheitlichen Datentyps so im Speicher eines Computers abgelegt werden, dass ein Zugriff auf die Daten über Indizes möglich wird. Das Standard-Array ist im Gegensatz zum assoziativen Array auf ganzzahlige Indizes zur Adressierung festgelegt. Ein Index beginnt, bei einem (eindimensionalen) Array mit N Elementen, standardmäßig je nach Programmiersprache bei 0 (C++: 0,1,2,…,N-1) oder 1 (Fortran: 1,2,3,…,N), kann jedoch oftmals auch frei gewählt werden (42,43,44,…,N+41).

Dynamisches Array Ein dynamisches Array oder eine Array-Liste, eine Listendatenstruktur mit variabler Größe und wahlfreiem Zugriff, wo Elemente hinzugefügt oder entfernt werden können. Es wird von Standardbibliotheken vieler moderner Programmiersprachen zur Verfügung gestellt.

Ein dynamisches Array ist nicht dasselbe wie ein dynamisch zugewiesenes Array, bei dem es sich um ein Array handelt, dessen Größe bei der Zuweisung des Arrays festgelegt wird, obwohl ein dynamisches Array ein solches Array mit fester Größe möglicherweise als Back-End verwendet.

Ein einfaches dynamisches Array kann durch Zuweisen eines Arrays mit fester Größe erstellt werden, das normalerweise größer ist als die Anzahl der unmittelbar erforderlichen Elemente. Die Elemente des dynamischen Arrays werden am Anfang des zugrunde liegenden Arrays zusammenhängend gespeichert, und die verbleibenden Positionen gegen Ende des zugrunde liegenden Arrays werden reserviert oder nicht verwendet. Elemente können am Ende eines dynamischen Arrays in konstanter Laufzeit unter Verwendung des reservierten Speicherplatzes hinzugefügt werden, bis dieser Speicherplatz vollständig belegt ist.

Wenn der gesamte Speicherplatz belegt ist und ein zusätzliches Element hinzugefügt werden soll, muss das zugrunde liegende Array mit fester Größe vergrößert werden. Normalerweise ist die Größenänderung teuer, da ein neues zugrunde liegendes Array zugewiesen und jedes Element aus dem ursprünglichen Array kopiert werden muss. Elemente können in konstanter Zeit vom Ende eines dynamischen Arrays entfernt werden, da keine Größenänderung erforderlich ist. Die Anzahl der Elemente, die vom Inhalt des dynamischen Arrays verwendet werden, ist seine logische Größe, während die Größe des zugrunde liegenden Arrays als Kapazität oder physische Größe des dynamischen Arrays bezeichnet wird. Dies ist die maximale mögliche Größe, die verwendet werden kann, ohne Daten zu verschieben.

Ein dynamisches Array wird benötigt, wenn die maximale logische Größe nicht festgelegt ist oder nicht berechnet werden kann, bevor der Speicherplatz für das Array reserviert wird.

Assoziatives Array / Zuordnungstabelle

Eine Sonderform bildet das „assoziative Array“, auch „Zuordnungstabelle“ genannt. Es verwendet keine notwendigerweise ganzzahligen numerischen Indizes, sondern Schlüssel zur Adressierung der Elemente. Diese Schlüssel können prinzipiell beliebigen Typs sein, zum Beispiel Zeichenketten, müssen aber ein Element eindeutig identifizieren. Beispiel: Die Produktnummer ist der Index, mit dem Daten zu einem bestimmten Produkt in einer Produkttabelle indiziert werden, z. B.: Produkt = ProdBezeichn (ProdNr).

„Assoziativ“ werden solche Arrays nur genannt, wenn der die tatsächliche Datenadresse berechnende Suchalgorithmus von der Programmiersprache automatisch generiert wird. Am häufigsten werden assoziative Felder als Hashtabelle umgesetzt.

Element-Datentyp In statisch typisierenden Programmiersprachen sind Array-Inhalte teilweise auf Elemente eines einzelnen Datentyps eingeschränkt. Mitunter ist jedoch ein Spezialfall „weitgehend beliebiger Inhalt“ möglich, bei objektorientierten Programmiersprachen oft über Polymorphie der allgemeinen Basisklasse. In dynamisch typisierenden Programmiersprachen können meist Objekte oder allgemeine Datenstrukturen in fast beliebiger Zusammensetzung und Reihenfolge gespeichert werden. In dynamisch typisierenden Programmiersprachen werden jedoch oft nur assoziative Arrays angeboten.

Dimensionen In den meisten Programmiersprachen kann ein Array – und damit die darin gespeicherten Daten – nicht nur ein-, sondern mehrdimensional sein. Bei mehrdimensionalen Feldern wird zur Adressierung ihrer Elemente für jede Dimension ein eigener Index verwendet. Zum Begriff der Dimension können die nachfolgenden Varianten unterschieden werden. In den Beispielen wird ein symbolischer Beispielcode verwendet, der Startindex sei 1.

Eindimensionale Arrays Die Feldelemente werden wie in einer Liste als elementares Datenfeld oder als Verbund mit mehreren untergeordneten Elementarfeldern geführt. Der Zugriff auf die Informationen erfolgt über 'ArrayName (Index)'. Beispiele 1. eindimensional (wie eine ‚Liste‘) Vektor := array(3) of float // Deklaration einer 1-dimensionalen Liste namens „Vektor“ mit 3 ‚freien Plätzen‘ Vektor := (0.5, 1.7, -0.2) // der Punkt (x=0.5 ; y=1.7 ; z=-0.2) im ℝ³ Vektor liefert so die y-Komponente mit dem Wert 1.7.

2. eindimensional (mit Verbund-Datentyp): Produkt := array(100) of structure{ ProdNr := Text // Text mit max. 6 Stellen Einkaufspreis := FixPunktZahl[4;2] // Kommazahl mit 4 Stellen vor, 2 Stellen nach dem Komma Verkaufspreis := FixPunktZahl[4;2] // dito Lagerbestand := Integer // Ganzzahl mit 6 Stellen } // end structure Produkt(Index).ProdNr, Produkt(Index).Einkaufspreis liefern die genannten Werte für das Produkt, auf das der Index zeigt.

Mehrdimensional / In-sich-mehrdimensional

Mit dieser Variante lassen sich Informationen wie Elemente einer zweidimensionalen Fläche oder eines dreidimensionalen Würfels vorstellen. Dabei „beinhaltet nur die letzte Dimension die Elemente,“Programmersbase jede Einzelinformation ist somit allen Dimensionen, z. B. Breite, Höhe, Tiefe, gleichermaßen zuzurechnen. Der Zugriff erfolgt unter Angabe aller Indizes ('<AttrName>(i1,i2,...)'). ISO_IEC 11404 nennt diese Arrays unter den ‚General Purpose Datatypes‘ „inhärent mehrdimensional“. Diese mehrdimensionalen Arrays werden, vor allem im Bereich des Deep Learning, nach ihrer mathematischen Entsprechung auch als Tensoren bezeichnet. Beispiele 1. zweidimensional (wie eine Matrix oder eine Tabelle):