C# – Arrays

C# Anleitung

Arrays

Voraussetzung:

• Variablen und Datentypen in C#
• Schleifen

Anwendungsbeispiel:

In Deinem Programmierleben wirst Du früher oder später an den Punkt kommen, an dem Du viele Variablen vom selben Typ brauchst. Meist ist es dann auch praktisch, diese Variablen im Code individuell- oder auch alle nacheinander automatisiert anzusprechen zu können. Hier bieten sich sogenannte Arrays gut an.

Tutorial Arrays

Ein Array ist eine Folge von Variablen mit dem selben Datentyp, die per Index unterschieden werden. Man kann es sich bildlich wie ein Hotel mit mehreren Zimmern vorstellen. Um ein Zimmer anzusprechen wird die Zimmernummer benutzt. Nun kann man mit der Zimmernummer Gäste einem Zimmer zuweisen, oder kann darüber herausfinden wer in diesem Zimmer wohnt.

Zurück zur Programmierung ist das Hotel ein Array, ein Zimmer eine Zelle, die Zimmernummer der Index und ein Gast ist ein Wert.

Arrays werden zwischen Ein- und Mehrdimensionalen Arrays unterschieden. Wobei die Funktionsweise grundlegend immer die selbe ist.

Eindimensionales Array

Ein eindimensionales Array ist eine einfache Folge. Du kannst sie Dir folgendermaßen vorstellen:
Array

(Auf das Bild klicken zum vergrößern)

Ein eindimensionales Array legst Du mit dem folgenden Code an:

Wie beim Deklarieren einer Variable, gibst Du auch bei einem Array zuerst den Datentyp an.
Durch die eckigen Klammern weiß der Compiler, dass es sich dabei um ein Array handelt.

In der zweiten Zeile findest Du einen für Dich wahrscheinlich neuen Befehl: new.
Der new-Ausdruck kommt immer dann zum Einsatz, wenn von einer Klasse ein Objekt angelegt wird.
In dem Tutorial C# – Konsolenausgabe hast Du schon einen kurzen Einblick bekommen, was ein Objekt und eine Klasse ist. Detaillierter wird es in einem späteren Tutorial beschrieben.

In den eckigen Klammern hinter „new int“ gibst Du die Größe des Arrays an, sprich wie viele Zellen es beinhaltet. Wichtig hierbei ist, dass die Zahl, welche die Arraysgröße beschreibt eine Ganzzahl sein muss. Es gibt schließlich keine halben Zellen.

Im obigen Beispiel wurde Deklaration und Initialisierung in einzelnen Zeilen getrennt aufgeschrieben. Alternativ dazu, kannst Du das aber auch in einer Zeile machen. Das bietet sich vor allem dann an, wenn bei der Deklaration schon bekannt ist, wie groß das Array sein soll.

Standardmäßig werden alle Elemente des Arrays mit 0 vorinitialisiert. Wenn Du bei der Deklaration des Arrays auch schon Werte in die einzelnen Zellen schreiben willst, kannst Du dies folgendermaßen machen:

Hierbei ist zu beachten, dass man alle Zellen mit Werten belegen muss, also in den geschweiften Klammern müssen so viele Zahlen stehen, wie das Array Zellen hat.
Da C# anhand der Anzahl von Zahlen in den geschweiften Klammern auf die Größe des Arrays schließen kann, funktioniert dies auch, ohne die Arraygröße explizit anzugeben, wenn schon Werte mitgegeben werden:

Es gibt sogar eine noch kürzere Schreibweise in diesem Fall:

Zugriff auf Array-Zellen

Um nun auf die einzelnen Elemente des Arrays zugreifen zu können, also Werte ein- und auslesen, benötigst Du wie im vorherigen Hotelbeispiel eine Art Zimmernummer.
Dies ist der sogenannte Index. Dabei musst Du ein wenig umdenken. Denn C# fängt nicht bei Zimmernummer 1 an, sondern bei 0. Sprich, der Index der ersten Zelle ist 0 und von der letzten ist Arraygröße -1.
Im obigen Beispiel mit 5 Zellen also von 0 bis 4.

Wenn Du nun also z.B. der dritten Zelle den Wert 20 zuweisen willst, sieht das im Code wie folgt aus:

Auch hier werden die eckigen Klammern verwendet. In Ihnen steht der Index.

Wo Du Werte hineinspeichern kannst, möchtest Du höchstwahrscheinlich diese früher oder später auch auslesen. Das funktioniert nach dem selben Prinzip:

Somit ergibt sich auch eine mögliche Konsolenausgabe der Array-Zellen:

Der Index muss aber keine Konstante sein, sondern kann auch durch eine int-, byte- oder long-Variable ersetzt werden.

Dadurch wird der Einsatz des Indexes dynamisch und kann z.B. mit einer Schleife durchlaufen werden.

Wichtig ist aber, dass Du darauf achtest, dass nicht in höhere oder niedrigere Zellen, als das Array besitzt geschrieben wird.
Warum das wichtig ist, wird klar, wenn man sich den Speicheraufbau anschaut:
Speicher

(Auf das Bild klicken zum vergrößern)

Die einzelnen Zellen eines Arrays werden nämlich auf eine besondere Art angesprochen. Von der ersten Zelle ausgehend wird im Arbeitsspeicher die Zelle wie folgt angesprochen: Startzelle + Index * Größe Datentyp.

Mit diesem Code

passiert also folgendes im Arbeitsspeicher:

Der Inhalt der Speicheradresse von: Inhalt von Adresse der ersten Zelle + 3 * 4 Byte = 30.

Das bedeutet, wenn der Index außerhalb des Arrays liegt, veränderst Du Werte im Arbeitsspeicher, die nicht zu Deinem Array gehören. Wenn es ganz blöd läuft veränderst Du damit einen Wert eines anderen Programms, welches dann unter Umständen abstürzen könnte.

Visual Studio erkennt dies beim Debuggen und schützt Dich davor, allerdings gibt es Entwicklungsumgebungen die das nicht machen. Daher solltest Du immer sicherstellen, dass der Arraybereich nicht verlassen wird.

Passend dazu gibt es die folgende Eigenschaft von Arrays um ihre Größe zu ermitteln:

Bedenke, dass dieser Wert die Anzahl der Zellen ist und noch -1 gerechnet werden muss um den höchsten Index zu erhalten.

Mehrdimensionale Arrays

Mehrdimensionale Arrays funktionieren im Prinzip wie eindimensionale Arrays, nur dass sie weitere Dimensionen haben. Du kannst Dir zum Beispiel ein zweidimensionales Array wie eine Tabelle vorstellen. Der erste Index wäre z.B. die Zeilen und der zweite die Spalten.
Bei einem dreidimensionalen Array käme noch die Tiefe dazu.
Aber anders als der Raum kannst Du bei Arrays unendlich viele Dimensionen definieren.

Zweidimensionale Arrays werden wie folgt deklariert:

Und mit Werten vorinitialisiert sähe dies wie folgt aus:

Dreidimensionales Array:

Je nachdem wie viele Dimensionen Du definierst, musst Du die Anzahl der Kommas setzen.

Probier ein wenig mit Arrays herum um die Funktionsweise besser zu verstehen.
Viel Erfolg dabei.

 

Zum nächsten Tutorial >> Methoden in C# Teil 1

Vielleicht gefällt Dir auch...

3 Antworten

  1. stefan sagt:

    Ich finde die Seite wirklich toll, schade das daran nicht weiter gemacht wurde/wird

  1. 23. März 2015

    […] C# – Arrays […]

Schreibe einen Kommentar