Offset berechnen



  • Hallo,

    ich habe folgendes Programm gefunden, das den Offset berechnet und ausgibt, aber ich versteh es nicht.

    #include <iostream.h>
    
    void main()
    {
      int Array[5] = {1,2,3,4,5};
    
      // Speicherbedarf eines einzelnen Elements
      cout << "Integer belegt " << sizeof(int)           << " Byte!\n";
      cout << "Integer belegt " << &Array[4] - &Array[0] << " Byte!\n";
    
      return;
    }
    

    Ich würde annehmen, dass man &Array[1] - &Array[0] rechnen muss, da es sich dabei ja genau um den Abstand eines Integers handelt, oder ?



  • Hallo,
    die Aussage:

    cout << "Integer belegt " << &Array[4] - &Array[0] << " Byte!\n";
    

    ist Käse. Du bekommst hier nicht die Anzahl der Bytes, sondern die Anzahl der Int-Elemente und die beträgt nun mal vier. Die Anzahl der Bytes wäre das Ergebnis * sizeof(Element), also Mal sizeof(int).



  • int main(){
    
      int Array[5] = {1,2,3,4,5};
    
      // Speicherbedarf eines einzelnen Elements
      cout << &Array[4]<<endl; //==0x22ff60
      cout << &Array[3]<<endl; //==0x22ff5c
    
      int a=&Array[4] - &Array[3];
      cout << a <<endl; //es kommt 1 raus
    
      int b=0x22ff60-0x22ff5c;
      cout << b << endl;; //hier kommt 4 raus
    
      //da würd ich erwarten, dass bei beiden 4 rauskommt, da es doch eigentlich 
      //identische Rechnungen sind, also <<<       &Array[4] == 0x22ff60  ???
    
    return;
    }
    


  • Nein, wenn Du Zeiger subtrahierst, komtm die Differenz in Elementen raus, nicht in Bytes. Aber das sagte Hume bereits 😉


Anmelden zum Antworten