Variable über Zeiger verändern



  • Joe_M. schrieb:

    Ich bleib dabei: Lieber einmal zuviel klammern, als einmal zu wenig...

    Allein schon wegen der Lesbarkeit. Natürlich macht es Spaß die Kollegen mit kryptischen Ausdrücken zu quälen, aber
    wer andern eine Grube gräbt, versteht nächste Woche den eigenen Code nicht mehr...

    Gruß,

    Alexander



  • ! ~ + - ++ -- & *

    Ok, das ++ hat eine höhere Abarbeitungsreihenfolge wie *.
    Ich verstehe aber deswegen immer noch nicht warum nicht die
    Variable sonder der Zeiger selbst erhöht wird.
    *y++.



  • Das erschließt sich aus der Bedeutung des Begriffs Rangfolge. Wenn Postfix-++ stärker bindet als *, dann ist *y++ dasselbe wie *(y++).



  • Also das finde ich ein wenig verwirrend.

    da (y++) aufgrund der Klammern eine höhere Rangfolge hat wie * wird zuerst der Zeiger erhöht
    und dann wird doch eigentlich der * ausgeführt oder ignoriert , was passiert denn dann.

    Nur aufgrund der Rangfolge ignoriert der Compiler das dereferenzieren.

    Wozu ist diese Rangfolge überhaupt da?



  • Er ignoriert es doch gar nicht. Er wirft es nur wieder weg, weil du das Ergebnis nicht verwendest. Vielleicht ist das mit der Rangfolge noch nicht ganz klar ... erinnere dich an die Grundschulzeit. Punktrechnung vor Strichrechnung. D.h. bei 3 + 4 * 5 wird zuerst 4*5 gerechnet, dann 3 + 20. Also mit Klammern geschrieben 3 + (4 * 5). Hier ist es das gleiche. Ohne Rangfolge wär nicht klar, ob bei *y++ zuerst ++ oder zuerst * angewendet wird. Also ob dieser ausdruck gleichbedeutend mit (*y)++ oder mit *(y++) ist. Da ++ stärker bindet, ist es die zweite Variante.



  • Garnicht so einfach die Regeln der Mathematik auf die Syntax von C,C++
    anzuwenden.

    Wäre es nicht sinnvoller, das * eine höhere Rangfolge wie ++ hat?


Anmelden zum Antworten