EMZETT.
Login

Index

Kurz: Die Positionsnummer eines Elements innerhalb einer geordneten Datenstruktur wie einem Array oder einer Liste — in den meisten Sprachen beginnt die Zählung bei 0, nicht bei 1.

Genauer: Ein Index erlaubt direkten Zugriff auf ein bestimmtes Element, ohne die Struktur der Reihe nach durchsuchen zu müssen (array[3] greift z. B. sofort auf das vierte Element zu). Diese nullbasierte Zählung ist eine häufige Fehlerquelle für Einsteiger (“Off-by-one-Fehler”), etwa wenn eine Schleife bis array.length statt array.length - 1 läuft und dadurch einen Index außerhalb der gültigen Grenzen anspricht.

Im Detail

Warum starten die meisten Sprachen bei 0 statt bei 1? Technisch gesehen beschreibt der Index bei einem Array historisch gesehen den Speicher-Offset vom Anfang des Arrays — das erste Element liegt direkt am Anfang, also Offset 0. Diese Konvention (geprägt u. a. von C) hat sich in den meisten modernen Sprachen (Java, Python, JavaScript, C++) durchgesetzt, auch wenn moderne Arrays intern oft gar nicht mehr so simpel im Speicher liegen. Einige wenige Sprachen (z. B. Lua, MATLAB) zählen bewusst ab 1.

zahlen = [10, 20, 30, 40]
zahlen[0]   # 10 - erstes Element
zahlen[3]   # 40 - viertes (letztes) Element
zahlen[4]   # Fehler! Index außerhalb des gültigen Bereichs (0-3)
zahlen[-1]  # 40 - Python-Sonderfall: negativer Index zählt vom Ende

Der klassische Off-by-one-Fehler entsteht meist in Schleifenbedingungen:

// FALSCH - läuft einen Schritt zu weit (Index == Länge existiert nicht)
für i von 0 bis LÄNGE(array):
    verarbeite(array[i])
 
// RICHTIG - Schleife endet, BEVOR i die Länge erreicht
für i von 0 bis LÄNGE(array) - 1:
    verarbeite(array[i])

Bei einem Array mit 4 Elementen sind die gültigen Indizes 0, 1, 2, 3 — der Index 4 (also array[LÄNGE(array)]) existiert nicht. Dieser Fehler ist deshalb so verbreitet, weil die Grenze (< länge vs. <= länge) nur um ein einziges Zeichen abweicht und im Kopf leicht verwechselt wird, aber im schlimmsten Fall zu einem Programmabsturz oder — in Sprachen ohne automatische Grenzprüfung wie C — zu unvorhersehbarem Verhalten (Zugriff auf fremden Speicher) führt.

Die meisten modernen Sprachen und Bibliotheken bieten deshalb Wege an, den Index gar nicht erst manuell zu verwalten — etwa eine “for-each”-Schleife, die direkt über die Elemente statt über Indizes iteriert, wenn der Index selbst nicht gebraucht wird.

Siehe auch: Arrays, For-Schleife, Liste