++*zeiger *zeiger++



  • also habe folgendes problem! mit meinem gcc compiler compiliere ich folgendes:

    int x=5;
    int *zeiger;
    zeiger=&x;
    ++*zeiger;    //das funktioniert wunderbar also von x wird der wert auf 6
                 // und der zeiger zeigt auch auf den wert 6
    *zeiger++;   //funktioniert nicht weder wird x erhöht und der wert auf den
                 // der zeiger zeigt ist eine lange zahl
    was ist falsch in den büchern steht das müsste gehen warum bei mir nicht
    liegt es an suse?
    


  • Original erstellt von drmabuse:
    **```
    ++*zeiger; //das funktioniert wunderbar also von x wird der wert auf 6
    // und der zeiger zeigt auch auf den wert 6

    SO ist es für den Compiler wunderbar eindeutig. Erst den Zeiger auflösen und dann das Ergebnis erhöhen.

    **```
    *zeiger++; //funktioniert nicht weder wird x erhöht und der wert auf den
    // der zeiger zeigt ist eine lange zahl
    was ist falsch in den büchern steht das müsste gehen warum bei mir nicht
    liegt es an suse?

    Hier ist es nicht mehr eindeutig. Was soll der Compiler machen? erst den Zeiger auflösen oder erst den wert des Zeigers erhöhen? Da ++ eine höhere Präferenz als * hat, wird zuerst der Zeiger erhöht, zeigt also auf die Speicherstelle NACH x und danach wird der Zeiger aufgelöst. Dir sollte ein (*zeiger)++ helfen. 🙂



  • Original erstellt von TriPhoenix:
    Hier ist es nicht mehr eindeutig.

    Doch doch, man muss es nur auch als Programmierer wissen 😉



  • Original erstellt von DrGreenthumb:
    Doch doch, man muss es nur auch als Programmierer wissen 😉

    Prinzipiell nicht mehr eindeutig 😃

    [ Dieser Beitrag wurde am 29.06.2003 um 01:57 Uhr von TriPhoenix editiert. ]



  • also wenn ich sowas sehe *zeiger++;
    heisst es das , wenn der zeiger ein int ist die adresse sich um 4 byte verschiebt oder was?



  • Original erstellt von drmabuse:
    *also wenn ich sowas sehe zeiger++;
    heisst es das , wenn der zeiger ein int ist die adresse sich um 4 byte verschiebt oder was?

    sofern ein int 4 byte gross ist, JA

    kleiner Tip: fuer den anfang kannst du ruhig viele klammern setzen, auch wenn sie sinnlos sind, das hilft!

    ++(*zeiger);
    (*zeiger)++;

    und schon ist (fuer dich) klarer was das macht.

    spaeter wenn du die ganzen operatoren-rangordnungen intus hast, brauchst du das natuerlich nicht mehr, aber bis dahin ist das n gutes hilfsmittel.


Anmelden zum Antworten