Fragestellung zu Priorität von Operatoren



  • Hallo, ich bin auf der Suche nach einer guten Erläuterung der Priorität der Operatoren in C.
    Folgende Aufgabenstellungen liegt mir vor:

    Zum Kopieren zweier Strings finden Sie in einer Library folgenden Code:
    void strcpy ( char * p , char * q )
    {
    while (*p++ = *q++) ;
    }
    Unter welchen Voraussetzungen an p,q funktioniert dies? Begründen Sie.

    sowie:

    Welchen Effekt besitzt *p++ für einen (beliebigen) Zeiger p? Begründen Sie.

    Bei zweitem hätte ich jetzt gesagt dass sich *p++ in *p = p++ auflösen lässt, das dies meinen Tests entsprechen würde.

    Vielen Dank.



  • Fabhijan schrieb:

    Hallo, ich bin auf der Suche nach einer guten Erläuterung der Priorität der Operatoren in C.

    Google mal nach "operator precedence"

    Bei zweitem hätte ich jetzt gesagt dass sich *p++ in *p = p++ auflösen lässt,

    Das würde ich nicht sagen. Ersteres ist einfach ein Zugriff, zweiteres ist eine Zuweisung, die nur funktioniert, wenn der Typ von p (also ein Pointertyp) in den Typ konvertierbar ist, auf den p zeigt. Die Fragestellung zielt wohl einfach darauf ab, ob *p++ jetzt als (*p)++ (also Inkrement des Pointee) oder als *(p++) (also Dereferenzierung von p vor dessen Inkrement) zu lesen ist - und genau das beantwortet dir die Operatorpräzedenz.


Anmelden zum Antworten