Die Programmiersprache C ist als Nullindex-Array-Sprache bekannt. Auf das erste Element in einem Array kann mit zugegriffen werden 0
. Beispiel: double arr[2] = {1.5,2.5}
Das erste Element im Array arr
befindet sich an Position 0. arr[0] === 1.5
Welche Programmiersprachen sind 1-basierte Indizes?
Ich habe gehört, dass diese Sprachen für den Array-Zugriff bei 1 statt 0 beginnen: Algol, Matlab, Action!, Pascal, Fortran, Cobol. Ist das komplett?
Insbesondere würde ein auf 1 basierendes Array mit 1 und nicht mit Null auf das erste Element zugreifen.
arrays
programming-languages
indexing
Alec Jacobson
quelle
quelle
Antworten:
Eine Liste finden Sie auf Wikipedia .
quelle
Fortran beginnt bei 1. Ich weiß das, weil mein Vater Fortran vor meiner Geburt programmiert hat (ich bin jetzt 33) und er moderne Programmiersprachen wirklich dafür kritisiert, dass sie bei 0 beginnen. Er sagt, es sei unnatürlich, nicht wie Menschen denken, im Gegensatz zu Mathematik und demnächst.
Ich finde Dinge, die bei 0 beginnen, jedoch ganz natürlich. Meine erste echte Programmiersprache war C und * (ptr + n) hätte nicht so gut funktioniert, wenn n nicht bei Null angefangen hätte!
quelle
Eine ziemlich große Liste von Sprachen finden Sie auf Wikipedia unter Vergleich der Programmiersprachen (Array) unter der Tabelle "Array-System-Querverweisliste" (Standard-Basisindexspalte).
Diese hat eine gute Diskussion über 1- vs. 0-indizierte und Abonnements im Allgemeinen
Um aus dem Blog zu zitieren:
quelle
Fortran, Matlab, Pascal, Algol, Smalltalk und viele andere.
quelle
Sie können es in Perl tun
Sie können es auch mit 42 beginnen lassen, wenn Sie sich so fühlen. Dies wirkt sich auch auf Zeichenfolgenindizes aus.
Die Verwendung dieser Funktion wird dringend empfohlen.
quelle
Auch in Ada können Sie Ihre Array-Indizes nach Bedarf definieren:
Jemand könnte argumentieren, dass benutzerdefinierte Array-Indexbereiche zu Wartungsproblemen führen. Es ist jedoch normal, Ada-Code so zu schreiben, dass er nicht von den Array-Indizes abhängt. Zu diesem Zweck stellt die Sprache Elementattribute bereit, die automatisch für alle definierten Typen definiert werden:
quelle
JDBC (keine Sprache, sondern eine API)
quelle
ORDER BY 1
(erste Spalte) oderSUBSTRING(name, 2)
(ab dem 2. Zeichen)Erlang's Tupel und Listen Index ab 1.
quelle
Lua - enttäuschend
quelle
Gefunden - Lua (Programmiersprache)
Überprüfen Sie den Abschnitt Arrays, in dem steht:
"Lua-Arrays basieren auf 1: Der erste Index ist 1 anstelle von 0, wie dies bei vielen anderen Programmiersprachen der Fall ist (obwohl ein expliziter Index von 0 zulässig ist)."
quelle
VB Classic, zumindest durch
quelle
Dim x(10)
der 11 Elemente erstellt werden…0
basieren auf und die Zahl deklariert die Obergrenze (gültige Indizes reichen von0
bis10
). Dies passt gut, da die For-Schleifen von VB inklusive sind .Saiten in Delphi beginnen bei 1.
(Bei statischen Arrays muss die Untergrenze explizit angegeben werden. Dynamische Arrays beginnen immer bei 0.)
quelle
ColdFusion - obwohl es Java unter der Haube ist
quelle
Ada und Pascal.
quelle
PL / SQL . Wenn Sie Sprachen verwenden, die bei 0 beginnen und mit Oracle interagieren, müssen Sie die 0-1-Konvertierungen für den Array-Zugriff per Index selbst durchführen. In der Praxis
foreach
ist es kein großes Problem, wenn Sie ein Konstrukt wie z. B. über Zeilen verwenden oder auf Spalten nach Namen zugreifen. Möglicherweise möchten Sie jedoch die Spalte ganz links, z. B. Spalte 1.quelle
Indizes beginnen in CFML bei eins.
quelle
Die gesamte Wirthian-Sprachreihe, einschließlich Pascal, Object Pascal, Modula-2, Modula-3, Oberon, Oberon-2 und Ada (sowie einige andere, die ich wahrscheinlich übersehen habe), ermöglicht die Indizierung von Arrays von einem beliebigen Punkt aus, einschließlich: offensichtlich 1.
Erlang indiziert Tupel und Arrays von 1.
Ich denke - aber ich bin nicht mehr positiv -, dass Algol und PL / 1 beide von 1 indizieren. Ich bin mir auch ziemlich sicher, dass Cobol von 1 indiziert.
Grundsätzlich sind die meisten Programmiersprachen auf hoher Ebene vor C von 1 indiziert (wobei Assemblersprachen aus offensichtlichen Gründen eine bemerkenswerte Ausnahme darstellen - und der Grund, warum C von 0 indiziert), und viele Sprachen außerhalb der C-dominierten Hegemonie tun dies bis heute.
quelle
Es gibt auch Smalltalk
quelle
Visual FoxPro, FoxPro und Clipper verwenden alle Arrays, bei denen Element 1 das erste Element eines Arrays ist ... Ich gehe davon aus, dass Sie dies mit 1-indiziert meinen.
quelle
Ich sehe, dass das Wissen von fortran hier immer noch in der '66 -Version ist.
Fortran hat sowohl die untere als auch die obere Grenze eines Arrays variabel.
Das heißt, wenn Sie ein Array wie folgt deklarieren:
dann ist 1 die Untergrenze (standardmäßig).
Wenn Sie es wie deklarieren
dann hat es jedoch eine Untergrenze von 0.
Wenn Sie es andererseits wie deklarieren
dann können Sie es beliebig zuordnen. Zum Beispiel
bedeutet, dass das Array die Elemente enthält
Es sind auch einige weitere interessante Kombinationen möglich:
die als Hausaufgabe für den interessierten Leser übrig bleiben :)
Dies sind nur die, an die ich mich auf Anhieb erinnerte. Da eine der Hauptstärken von fortran die Array-Handhabung ist, ist es klar, dass es viele andere Ein- und Ausgänge gibt, die hier nicht erwähnt werden.
quelle
Niemand erwähnte XPath.
quelle
Mathematica und Maxima, neben anderen bereits erwähnten Sprachen.
quelle
informix, neben anderen bereits erwähnten Sprachen.
quelle
Basic - nicht nur VB, sondern alle nummerierten Versionen der alten 80er Jahre.
Richard
quelle
FoxPro verwendete Arrays ab Index 1.
quelle
dBASE verwendete Arrays ab Index 1.
Arrays (Anfang) in dBASE
quelle
Rollenspiel, einschließlich modernes Rollenspiel
quelle
Obwohl C standardmäßig mit 0 indiziert ist, ist es möglich, den Zugriff auf ein Array in C so zu arrangieren, als wäre es 1 (oder ein anderer Wert) indiziert. Nicht etwas, was man von einem normalen C-Codierer oft erwarten würde, aber es hilft manchmal.
Beispiel:
quelle
1
vonzero_based
undefiniert Verhalten nach ISO C - es ist nicht legal Zeiger zu verschieben , um vor dem ersten Elemente in einem Array. Eine konforme Implementierung kann Überprüfungen außerhalb der Grenzen einfügen, die beispielsweise durch Ihren Code ausgelöst werden.