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.