Wenn man bedenkt, dass es in einer Zeichenfolge außerhalb von Computern keine nullte Position gibt, sollte die Frage nicht wirklich lauten: Warum basieren Zeichenfolgen in einigen der gängigsten Programmiersprachen auf 0? (Ich bin mir nicht sicher über die Aussage von "fast jeder Programmiersprache", da es viel mehr Sprachen gibt, als die meisten Menschen kennen)
Zeichenfolgen in C und anderen Sprachen sind einfach eine Reihe von Zeichen (dh char[]
), die beendet werden null
. Aus diesem Grund können Sie einzelne Zeichen mithilfe der Indexnotation (dh stringVariable[index]
) referenzieren . Variablen sind eine Adresse an einen Ort im Speicher. Der Index ist der Versatz zur Startadresse des Arrays. Wenn man also davon ausgeht, dass Strings ein Array sind, ist es sinnvoll genug, mit ihnen auf 0-Basis zu interagieren, da es zumindest konsistent ist, auch wenn es manchmal etwas umständlich ist.
Warum ist das in SQL anders? Ich würde vermuten, dass es bei SQL mehr um physischen Speicher als um Speicherzuweisung geht. Während einige RDBMS Arrays unterstützen (wie PostgreSQL), ist dies kein Standard. SQL ist auch eine deklarative Hochsprache, die die betrieblichen Besonderheiten der tatsächlichen Abfrage-Engine verbirgt, sodass die Konzepte von Adressen und Zeigern einfach nicht vorhanden sind. Daher ist es nicht wirklich sinnvoll, bei der Arbeit mit SQL in 0-basierten Indizes zu denken.
Wie ein anderes Poster feststellt, ist die Quelle der nullbasierten Indizierung die Adressierung. Die erste Adresse in einem Datenblock endet mit Null (unabhängig davon, ob sie die letzte Ziffer im physischen Speicher belegt oder nicht). Und es sind nicht nur Computer - die Adresse des ersten Hauses in Ihrem Nachbarschaftsblock ist wahrscheinlich eine Zahl wie 300 - nicht 301.
Wenn Sie iterative Funktionen programmieren, bei denen Module verwendet werden (um alle 5 Iterationen etwas zu bewirken usw.), ist es praktisch - und schneller -, mit nullbasierten Arrays zu arbeiten.
Bitte beachten Sie auch: