Adressen aufsteigend?



  • Hallo,
    wenn ich z.B. ein Array habe, sagt der Standard dann irgendetwas über die Adressen der einzelnen Elemente aus? Ich meine damit soetwas wie das ein Element mit einem grösseren Index auch an einer höheren Adresse liegt?
    Speziell möchte ich wissen, ob folgendes etwa undefiniert oder stets wahr ist:

    int a[10] = {};
    
    if ((&a[0] < &a[5]) && (&a[5] < &a[9]))
    {
      // ist das _stets_ erfuellt?
    }
    

    Ist es also ok, solche Vergleiche anzustellen?



  • jopp
    weil op[] so definiert ist:

    int a[20];
    a[10]; //*(a+10)
    

    dein if:

    int a[10];
    
    if((a+0 < a+5) && (a+5 < a+9))
    {
      //...
    }
    

    musst du mal nach zeigerarithmetik googlen.

    bb



  • hm...macht Sinn - dank Dir.


  • Mod

    Kurze Antwort: Ja, dies ist garantiert so. Die Elemente liegen auch alle lückenlos nacheinander im Speicher. (Beides gilt übrigens nicht nur bei Arrays sondern auch bei std::vector).

    Lange Antwort:
    Ok, der Standard über Arrays und vector ist mehrere Seiten lang, den schreib ich hier nicht alles hin. Die kurze Antwort muss reichen.

    edit: Oh, viel zu spät mit der Antwort. War ein bisschen vertieft in der Lektüre des Sprachstandards.


Log in to reply