Zeiger problem



  • Hallo
    ich lerne gerade c und bei den zeigern habe ich ein problem:

    int *zeiger;       //Zeiger deklarieren
    int var = 10;
    int *ptr;
    ptr = &var;
    int var2;
    var2 = *ptr;
    printf("var2 = %d\n",var2);
    printf("var  = %d\n",var);
    printf("*ptr = %d\n",*ptr);
    *ptr = 100;  //Hiermit wird der Wert der Variable dereferenziert.
    printf("*ptr = %d\n",*ptr);
    *ptr+=90;
    printf("190: %d\n",*ptr);
    *ptr++;
    printf("191: %d\n",*ptr);  // 2 ?
    *ptr--;
    printf("190: %d\n",*ptr);
    

    ich habe das jetzt vollständig rein kopiert.
    also bei der zeile wo // 2 ? steht gibt der zeiger 2 aus und nicht 191.
    Warum?

    danke schön im voraus



  • Hallo,

    der Inkrement-Operator hat bei der Auswertung des Ausdrucks Vorrang vor der Dereferenzierung. Du mußt also Klammern

    (*ptr)++;
    (*ptr)--;
    


  • leider wurde im buch so nicht beschrieben
    und wieso kommt dann 2 raus?



  • maximo schrieb:

    leider wurde im buch so nicht beschrieben
    und wieso kommt dann 2 raus?

    Weil in *(ptr+1) 2 steht



  • Code mit Ausgaben als Kommentar:

    int *zeiger;       
    int var = 10; 
    int *ptr; 
    ptr = &var; 
    int var2; 
    var2 = *ptr; 
    printf("var2 = %d\n",var2); // 10
    printf("var  = %d\n",var);  // 10
    printf("*ptr = %d\n",*ptr); // 10
    *ptr = 100;  
    printf("*ptr = %d\n",*ptr); // 100
    *ptr+=90; 
    printf("190: %d\n",*ptr);   // 190
    (*ptr)++; 
    printf("191: %d\n",*ptr);   // 191 
    (*ptr)--; 
    printf("190: %d\n",*ptr);  // 190
    


  • alles klar

    vielen dank


Anmelden zum Antworten