Frage zum Array



  • Hallo ich hab in einem Beispiel gesehen das dieser Code falsch sein soll.
    Aber ich weiss nicht was hier schlecht sein soll. Der Code funktioniert bei mir ohne Probleme oder ist da irgendwo ein undefiniertes Verhalten und ich habe gerade nur Glück?

    int a[10];
    int *p = &a[9];
    
    *p = 11;
    cout<<"p: "<<*p<<endl;
    
    a[10]=12;
    
    cout<<a[10]<<endl;
    


  • ABC_ schrieb:

    [...]oder ist da irgendwo ein undefiniertes Verhalten und ich habe gerade nur Glück?

    Nein, Du hast Pech: Ein int[10] hat zugreifbare Indizes von 0..9. Wenn es es beim Zugriff auf das nicht vorhandene 11te Element nicht kracht, ist es eher Pech als Glück, weil Du nicht merkst, dass Du Mist baust.



  • So mal schauen ob ich es verstanden habe:

    int a[10];  // Legen die Elemente 0 1 2 3 4 5 6 7 8 9 an.
    
    int *p = &a[9]; 
    
     *p = 11; // Ich schreibe an Element 9 aus dem Array a die Zahl 11
     cout<<"p: "<<*p<<endl; // Ich gebe den Wert aus der im Array a an Element 9 steht
    
     a[10]=12; // Ich greife auf Element 10 zu und weise Element 10 den Wert 12 zu FEHLER den der indiz geht nur von 0 bis 9 ( von 0 bis 9 ist 10 )
    
     cout<<a[10]<<endl;
    

    Kann man das so beschreiben?

    Ich dachte halt wenn ich schreibe int a[10]; das die Element von 0 bis 10 gehen. 0 1 2 3 4 5 6 7 8 9 10 da hab ich mich wohl getäuscht ...


  • Mod

    Sieht richtig aus, nur dass es strenggenommen kein Fehler, sondern undefiniertes Verhalten ist.
    Gib dir doch mal den Zahlenwert von p vor und nach dem Schreiben an a[10] aus:

    cout << p << endl;  
      a[10]=12;   
      cout<<a[10]<<endl; 
      cout << p << endl;
    

    Bei den Code den die meisten Compiler aus deinem Programm erzeugen dürftest du da einen Unterschied feststellen.



  • ABC_ schrieb:

    So mal schauen ob ich es verstanden habe:

    int a[10];  // Legen die Elemente 0 1 2 3 4 5 6 7 8 9 an.
    
    int *p = &a[9]; 
    
     *p = 11; // Ich schreibe an Element 9 aus dem Array a die Zahl 11
     cout<<"p: "<<*p<<endl; // Ich gebe den Wert aus der im Array a an Element 9 steht
    
     a[10]=12; // Ich greife auf Element 10 zu und weise Element 10 den Wert 12 zu FEHLER den der indiz geht nur von 0 bis 9 ( von 0 bis 9 ist 10 )
    
     cout<<a[10]<<endl;
    

    Kann man das so beschreiben?

    Ich dachte halt wenn ich schreibe int a[10]; das die Element von 0 bis 10 gehen. 0 1 2 3 4 5 6 7 8 9 10 da hab ich mich wohl getäuscht ...

    Richtig: Bei der Arraydefinition gibt man/frau an, wieviele Elemente (n) das Array enthalten soll. Der maximal mögliche Index ist dann immer n-1, da das erste Element den Index 0 hat.

    mfg Martin


Anmelden zum Antworten