• Hallo,

    ich hätte mal eine allgemeine Frage :

    Warum beginnen Arrays in den meisten Sprachen bei Index 0 ?

    Jetzt könnten ja einige sagen, daß das z.B. bei (X)Profan so ist, weil

    es in Delphi auch so üblich ist. Daß es in Pascal / Delphi auch anders

    geht, zeigen ja auch viele Einträge mit Kursen im Netz :

    Code
    var  gaeste: array[1..10] of string;

    Ich glaube, in BASIC war es früher sogar üblich, daß man bei Index 1 angefangen hat.

    Manche sagen auch, daß bei Index 0 die Arraypositionen (compilerintern) besser zu

    berechnen seien, da das 1. Element genau auf der Startadreese liegt und erst beim

    2. Element das Rechnen losgeht.

    Mir geht es um den generellen Grund, also nicht nur (X)Profan, und was ihr dazu meint.

    Wäre doch bestimmt mal eine Diskussion wert.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Ich denke auch, das hat was mit der Berechnung zu tun. Index x Bytezahl + Startadresse rechnet sich einfach schneller. (Index - 1) x Bytezahl + Startadresse wäre ein Rechenschritt mehr und das bei jedem einzelnen Zugriff.

    Gruß Volkmar

  • Ob schneller bei der Ausführung sei mal dahin gestellt.

    Ich habe mir aus Bequemlichkeit das folgende Konstrukt angewöhnt :

    Code
    WhileLoop 0, SizeOf(a[]) - 1
    a[&LOOP] = irgendwas
    ....
    EndWhile

    Wäre folgendes eigentlich schneller ?

    Code
    x& = SizeOf(a[]) - 1
    WhileLoop 0, x&
       ....
    EndWhile

    Immerhin muß ja der Compiler /Interpreter bei jedem Durchlauf den Wert von SizeOf(a[]) neu berechnen.

    Macht natürlich nur bei tausenden von Durchläufen einen Sinn.

    Das schnellere Berechnen des Array-Index kommt ja erst in größeren Schleifen richtig zum Tragen. Ist also

    bei einem Einzelzugriff eher vernachlässigbar. Darin sehe ich das Problem nicht so, zumal man ja selten sehr

    große Schleifen, in denen Arrays mit im Spiel sind, braucht.

    Erinnert mich jetzt komischerweise etwas an den schnellen Befehl MAT.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Hier setzt Du ja von Anfang an den Startwert für eine Schleife fest. Da wird das also nur einmal berechnet, egal, wie viele Durchläufe die Schleife hat. Ich will ja auch mal nur auf bestimmte Werte zugreifen, nicht in einer Schleife auf alles. Auch das können je nach Aufgabenstellung sehr viele Abfragen sein. Und was bei einer Hochsprache "nett" aussieht, muß nicht unbedingt in Assembler das Beste sein. Ich würde da, wenn ich eine Hochsprache erfinden müßte, auch den Index bei 0 beginnen ;)

    Gruß Volkmar

  • mein erstes Basic war das Commodore Basic 3.5 auf einem Commodore Plus4 (8 Bit 64K RAM)

    Und auch dort begann ein Array mit den Index 0. Allein wegen der Ausnutzung des wertvollen RAMs, wurde natürlich jedes Byte genutzt. Also auch Index(0)

    Habe bis jetzt nicht wahnsinnig viele Programmiersprachen probiert, jedoch kann ich mich nicht erinnern, das jemals ein Array mit den Index 1 begann.

    Kommt aber schon oft vor, dass ich meine Arrays erst ab Index 1 belege, wenn es mir leichter oder übersichtlicher erscheint. Kommt immer etwas darauf an, wie oder wo so ein Index errechnet wird.

    Bei Berechnungen, die Nullbasierend sind oder 0 ergeben könnten, wird eben das Element 0 auch verwendet - falls nicht, beginne ich einfach bei 1

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!