Pointer auf array und damit Zugriff?



  • Hallo,

    ich verstehe folgendes nicht: Ich lege ein array auf dem heap an. Dann lasse ich einen weiteren pointer auf das array zugreifen und will mit diesem auf dem array hin und hersprignen doch es funktioniert nicht. die ausgabe ist anders.

    Pseudocode

    int* arr = new int[10];
    //fill arr with values
    
    int* ptr = NULL;
    ptr = arr;
    ptr += 10; //sollte auf letztes element von arr zeigen oder?
    for ( int i = 0; i < 10; i++)
    {
         std::cout << *ptr << " ";
         *ptr--;
    }
    std::cout << std::endl;
    


  • *ptr = arr[0]
    Also ist
    *(ptr + 10) = arr[10]



  • versuchs mal mit

    ptr += 10 * sizeOf(int);



  • Tolpan schrieb:

    versuchs mal mit

    ptr += 10 * sizeOf(int);

    Nein, mach das nicht. 10 ist schon jenseits der Arraygrenzen, dann ist es 40 erst recht.

    Der höchste gültige Index in einem Array mit 10 Elementen ist 9. Folglich kann ein Zeiger auf den Anfang 9 Mal inkrementiert werden, bevor er ungültig wird.



  • *ptr--;
    

    Sollte hier nicht einfach

    --ptr;
    

    stehen?

    MfG,
    ScRaT



  • Das außerdem.



  • testo schrieb:

    int* arr = new int[10];
    //fill arr with values
    
    int* ptr = NULL;
    ptr = arr;
    ptr += 10; //sollte auf letztes element von arr zeigen oder?
    for ( int i = 0; i < 10; i++)
    {
         std::cout << *ptr << " ";
         *ptr--;
    }
    std::cout << std::endl;
    

    Was soll denn die Ausgabe sein?

    ptr zeigt nach ptr+=10 nicht auf das letzte Element sondern eins dahinter. Dementsprechend stellt das erste *ptr einen Zugriff auf einen Speicherbereich dar, der Dir nicht gehört. Die Dereferenzierung bei *ptr--; ist sinnlos, da Du den Wert ja sowieso nicht benötigst.

    Probier mal das hier:

    int* arr = new int[10];
    //fill arr with values
    
    int* ptr = arr + 10;
    for ( int i = 0; i < 10; i++)
    {
         --ptr;
         std::cout << *ptr << " ";
    }
    std::cout << std::endl;
    

    Gruß,
    SP


Log in to reply