Zitat Zitat von Brauni90 Beitrag anzeigen
Mehrdimensionale Array dienen lediglich der Übersichtlichkeit oder der Effizienz.
Bessere Veranschaulichung ja, Effizienz nein. Um auf Elemente mehrdimensionaler Arrays zugreifen zu können, sind mehr Operationen nötig als es bei eindimensionalen Arrays der Fall ist. Arrays, egal welcher Dimension (dieser Begriff dient wirklich nur der Veranschaulichung) sind immer eindimensional im Speicher ausgelegt, so dass, um auf Elemente mehrdimensionaler Arrays zugreiffen zu können, Berechnungen notwendig sind.

Eindimensionales Array mit 12 Elementen:
Code:
im Speicher
-------------------------------------------------------------
| 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 | 11 |
-------------------------------------------------------------

bildlich
-------------------------------------------------------------
| 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 | 11 |
-------------------------------------------------------------
Zweidimensionales Array mit 4x4 Elementen:
(hier im Format xy; im Code wird man mit array[y][x] zugreifen)
Code:
im Speicher
---------------------------------------------------------------------------------
| 00 | 01 | 02 | 03 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 23 | 30 | 31 | 32 | 33 |
---------------------------------------------------------------------------------

bildlich
---------------------
| 00 | 01 | 02 | 03 |
---------------------
| 10 | 11 | 12 | 13 |
---------------------
| 20 | 21 | 22 | 23 |
---------------------
| 30 | 31 | 32 | 33 |
---------------------
(Nach dem gleichen Prinzip sind auch alle folgenden mehrdimensionalen Arrays aufgebaut: Die Elemente der vorherigen Dimension sind in der nächsten Dimension Reihen.)

Wie man sehen kann, beginnt die nächste Reihe immer am Ende der vorherigen Reihe. Um also auf ein Element zugreifen zu können, muss man den Offset berechnen, was wie folgt aussieht:

Für eindimensionale Arrays:
Code:
Offset = Länge(Element) * x
Für zweidimensionale Arrays:
Code:
Offset = Länge(Element) * Länge(ReiheX) * y + Länge(Element) * x
Für dreidimensionale Arrays:
Code:
Offset = Länge(Element) * Länge(ReiheZ) * Länge(ReiheX) * y + Länge(Element) * Länge(ReiheZ) * x + Länge(Element) * z
usw.

Man sieht, dass je mehr Dimensionen, desto mehr Operation sind nötig um auf die Elemente zugreifen zu können. Selbst wenn einige der Multiplikationen wegoptimiert werden können, da zur Kompilierzeit bekannt, kann man trotzdem davon ausgehen, dass der Rechneaufwand von Dimension zu Dimension steigt.