Warum beginnen Arrays bei Index 0?



  • hustbaer schrieb:

    EDIT: man könnte den Zeiger trotzdem einfach eins vor das erste Element zeigen lassen, denn in einer Sprache wo eben a[1] das erste Element bezeichnet wäre wohl der C++ Standard nicht anwendbar und daher auch kein Problem. "Technisch" im Sinne von "was kann auf den meisten Plattformen implementiert werden" ist es also sicher kein Problem. In Pascal z.B. kann ich mir überhaupt aussuchen wo ein Array losgeht, und Pascal Compiler gibts auch für genügend Plattformen.

    In C, C++ geht es wohl eher um diesen "Trick":

    int realarray[10];
    int *array = &realarray[-1];
    


  • minhen schrieb:

    Wie ich schon gesagt habe: dass Arrays in C bei 0 beginnen ist der geringen Abstraktion von C zu verdanken.

    finde ich auch, in C ist es einfach der offset in den speicher. in höheren sprachen würde man eher ordinalzahlen (erstes, zeites, drittes, usw...) nehmen, weil in solchen sprachen maschinennahe betrachtungsweisen keine rolle spielen, auch keine adressen, pointer usw...
    🙂



  • finix schrieb:

    int realarray[10];
    int *array = &realarray[-1];
    

    böser trick, das gibt afaik undefiniertes verhalten!?



  • 0 ist keine Zahl. Weil es sich nicht multiplizieren und addieren lässt. typisch amerikanisch.
    das ist ein menschlicher denkfehler.

    für mich ist das 1-10. damit division durch 0 ausgeschlossen ist.

    kann man C++ so manipulieren dass die Zahl 0 nicht mehr existiert? Der anfang nur 1 und die negativen zahlen -1 ohne die 0 als zwischenraum?



  • dot schrieb:

    böser trick, das gibt afaik undefiniertes verhalten!?

    Ja, siehe die vorigen Beiträge.



  • ...



  • Bashar schrieb:

    5.7§5 (Es geht um Pointer-Addition) "If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array, the evaluation shall not produce an overflow; otherwise, the behavior is undefined."

    Aus welchem Gesetzbuch stammt das?

    Hier geht's doch um die Grundsatzfrage, warum man ab 0 zählt und nicht ab 1. Da kannste wohl schlecht ein System als Beleg bringen, das sich für die 0 entschieden hat und darauf aufbauend dann Regeln definiert hat, die nun mit der ab 1 Zählweise nicht zusammenpassen. Ich meine, Du kannst schon, aber es zeigt einfach nichts, außer dass man wenn man sich für 0 entschieden hat man nicht einfach bei 1 anfangen kann. Wow.



  • nullhasser schrieb:

    0 ist keine Zahl. Weil es sich nicht multiplizieren und addieren lässt. typisch amerikanisch.
    das ist ein menschlicher denkfehler.

    Wie bitte? Klar ist die Null eine Zahl, mit der du ganz normal rechnen kannst (nur Division macht ein paar Probleme).

    kann man C++ so manipulieren dass die Zahl 0 nicht mehr existiert? Der anfang nur 1 und die negativen zahlen -1 ohne die 0 als zwischenraum?

    Sicher könnte man, aber wozu? Und was soll dann die Rechnung "7-7" für ein Ergebnis liefern?

    @Jester: Wenn mich nicht alles täuscht, dürfte das aus dem ANSI C Standard kommen.



  • Die natürlichen Zahlen beginnen mit 0, da ist es natürlich auch bei Arrays so anzufangen. 🙂

    Ich habe jedoch schon gehört, dass es Unis und Dozenten geben soll, die bei 1 zu zählen anfangen.



  • Ponto schrieb:

    Die natürlichen Zahlen beginnen mit 0, da ist es natürlich auch bei Arrays so anzufangen.

    ob die natürlichen zahlen bei 0 beginnen oder nicht ist eine streitfrage (es ist nicht allgemein definiert wo sie beginnen).
    die einen machen es so, die anderen so. je nachdem was gerade praktischer ist...
    in der informatik beginnt man gerne mit 0. bei uns an der uni z.b. beginnt |N in allen mathevorlesungen bei 1.



  • OK, nochmal an alle die immer wieder damit anfangen: Was hat C oder C++ mit Mathematik zu tun?



  • ich hab falsch geschrieben, ich meinte: mit der null kann man nicht multiplizieren und auch nicht dividieren. mit addition und subtraktion schon.

    bei 7-7 soll -1 rauskommen und -1 steht für negativ

    die bits sollen aus -1 und 1 bestehen. an aus an aus 1 -1 1 -1 so wie in steckdosen gibt es auch nur +pol und -pol. aber keine null !



  • hustbaer schrieb:

    OK, nochmal an alle die immer wieder damit anfangen: Was hat C oder C++ mit Mathematik zu tun?

    also dadurch dass c++ die null benützt, ist es die wahrscheinlichkeit höher dass es mal abstürzt. z.b. division durch 0. oder endlosschleifen usw...



  • nullhasser schrieb:

    mit der null kann man nicht multiplizieren und auch nicht dividieren.

    falls dir das noch nie untergekommen ist: man kann mit 0 multiplizieren.
    und ja, 0 ist eine zahl.

    nullhasser schrieb:

    bei 7-7 soll -1 rauskommen und -1 steht für negativ

    interessante logik. wenn in einen raum 7 leute reingehen und 7 wieder rauskommen, dann ist nacher also um einen weniger drin!? 👍

    nullhasser schrieb:

    so wie in steckdosen gibt es auch nur +pol und -pol. aber keine null !

    ich denke du solltest dich mal etwas näher mit steckdosen befassen. dann wirst du merken, dass es dort sehr wohl 0 gibt.

    nullhasser schrieb:

    also dadurch dass c++ die null benützt, ist es die wahrscheinlichkeit höher dass es mal abstürzt. z.b. division durch 0. oder endlosschleifen usw...

    hm. ich denke man sollte dich nicht weiter füttern :p



  • dot schrieb:

    nullhasser schrieb:

    mit der null kann man nicht multiplizieren und auch nicht dividieren.

    falls dir das noch nie untergekommen ist: man kann mit 0 multiplizieren.
    und ja, 0 ist eine zahl.

    nullhasser schrieb:

    bei 7-7 soll -1 rauskommen und -1 steht für negativ

    interessante logik. wenn in einen raum 7 leute reingehen und 7 wieder rauskommen, dann ist nacher also um einen weniger drin :p

    5 * 0 = 0
    0 * 5 = 0

    0 * 5 * 3 * 666 * 1337 * 2342345 = 0

    egal was ich da mache, es kommt immer null raus. wo ist da das kreative ergebnis?

    ich kenne ein bug aus Cinema4D (3D-Programm), dass wenn ich ein Objekt auf 0 skaliere, dann kann man es nicht mehr rückgängig skalieren.

    wenn die 0 addieren lässt, ist die 0, wenn es eine zahl ist, logischerweise eine 1

    und 1 * 5 = 5 müsste auch so rauskommen 0 * 5 = 5, ist es aber nicht so - warum sinkt es auf einmal wieder?

    naja wenn im raum niemand drin ist, ist es immer -1 oder höher da luft auch volume ist



  • nullhasser schrieb:

    wenn die 0 addieren lässt, ist die 0, wenn es eine zahl ist, logischerweise eine 1

    😕 aha?



  • Jester schrieb:

    nullhasser schrieb:

    wenn die 0 addieren lässt, ist die 0, wenn es eine zahl ist, logischerweise eine 1

    😕 aha?

    wieviele stifte sind 0 ? gar keine. wenn ich 3 stifte dazulege müsste ich addieren ,aber mit was? wo sind die anderen stifte mit denen ich addieren kann?



  • was hat 0 + 3 = 3 für einen sinn wenn ich auch gleich 3 hinschreiben kann?

    was hat die Null für einen Sinn????



  • Die 0 ist das neutrale Element der Addition. Gäbe es sie nicht, dann hätte beispielsweise die Gleichung 3+x=3 keine Lösung.



  • Lass dich doch nicht von dem Troll veräppeln 😉


Anmelden zum Antworten