Priotitätsproblem
-
Ich hab ein Problem mit der Priorität des Postfixinkrement-Operator. Hier ein Beispiel dazu:
int main() { int zahl[3] = {10,34,8}; int *p = zahl; *p++ = 23; // !!! //p wurde 1 Feld erhöt. Befindet sich nun auf p[1] --p; for(size_t i = 0; i<3; ++i) { cout << p[i] << endl; } return 0; }Ich verstehe die stelle
int *p++ = 23nicht. Meiner Meinung nach wird erst inkrementiert und dann dereferenziert, also:
p++; *p = 23;Also wäre p[1] = 23. Dem ist aber nicht so, p[0] = 23....und genau dass verstehe ich nicht. Der Postfixinkrement-Operator hat doch eine höhere Priorität als der Dereferenzierungsoperator "*"?
Aber trotzdem passiert hier folgendes:*P = 23; p++;Also genau andersrum. Warum? In meinem C++ Buch ist in der "Prioritäten Tabelle der Operatoren" Postfixinkrement auf Platz 9 und Dereferenzierung auf Platz 22.
Ich verstehe es nicht.MfG
Stromberg
-
Beschäftigeste dich jetzt mit Pointern und Arrays
.*++p = 23;
-
*++p = 23;was ist damit? Hier benutzt du doch jetzt den Präfiinkrement oder?
MfG
Stromberg
-
Der Postfixinkrement Operator inkrementiert den Wert und gibt den alten zurück, der Präfix Operator inkrementiert den Wert und gibt den neuen zurück.
-
Stromberg schrieb:
Ich verstehe die stelle
int *p++ = 23nicht. Meiner Meinung nach wird erst inkrementiert und dann dereferenziert
Wird auch. Du kennst doch den Post-++-Operator, der erhöht und gibt eine nicht-erhöhte Kopie zurück. "p" wird also als erstes um eins erhöht, wegen Post-++ wird eine Kopie des "originalen" Zeigers zurückgegeben, diese Kopie dereferenziert und zugewiesen.