Freeed91 Geschrieben 22. September 2010 Geschrieben 22. September 2010 Hey Leute, wollte demletzt nochmal die Grundlagen mit Pointer überarbeiten und stieß auf folgendes Problem, dass ich einfach nicht verstehe. void bearbeit(int *zahl) { *zahl=*zahl+1; cout<<*zahl; cout<<endl<<endl; } int main() { int nummer=4; bearbeit(&nummer); system("Pause"); } Hier ist die Ausgabe nun 5 und das ist mir vollkommen verständlich. Warum bekomme ich aber hier einen vollkommen anderen Wert wenn ich es wie folgt schreibe void bearbeit(int *zahl) { *zahl++; cout<<*zahl; cout<<endl<<endl; } int main() { int nummer=4; bearbeit(&nummer); system("Pause"); } Wäre opti wenn mir das einer erklären könnte^^ P.s. Als Bibliotheken habe ich die iostream und die cstdlib eingebunden. Programmiert unter Dev C++ Danke im Vorraus =D Zitieren
TDM Geschrieben 22. September 2010 Geschrieben 22. September 2010 Programmiert unter Dev C++ Selbst schuld. Debug doch mal durch und setz ein paar Klammern. Z.B.: (*zahl)++; Ungewollte Pointer-Arithmetik. Zitieren
Klotzkopp Geschrieben 22. September 2010 Geschrieben 22. September 2010 Wäre opti wenn mir das einer erklären könnte^^Die Operatoren habe in C und C++ eine bestimmte Priorität, man sagt auch Bindungsstärke. Im Prinzip wie "Punkt vor Strich". *zahl++; Der Postfix-Inkrementoperator bindet stärker als der Dereferenzierungsoperator. Ich setze einmal Klammern, um das zu verdeutlichen: // so wird das ausgewertet: *(zahl++);[/code] Zuerst wird also der Zeiger inkrementiert, und dann wird der inkrementierte Zeiger dereferenziert. Das bewirkt undefiniertes Verhalten, wenn der Speicher "hinter" deinem Zeiger nicht von dir reserviert ist. Meistens passiert effektiv gar nichts. Du willst natürlich zuerst dereferenzieren und dann inkrementieren. Also musst du entsprechend Klammern setzen: [code]// so passt's: (*zahl)++; Das wäre dir übrigens nicht passiert, wenn du Prefix-Inkrement benutzt hättest: ++*zahl; Überhaupt sollte man sich angewöhnen, dort, wo der Wert des Inkrement- oder Dekrementausdrucks nicht gebraucht wird, die Präfix-Variante zu benutzen, also ++i statt i++, und Postfix nur dort, wo du den besonderen Effekt wirklich brauchst. Zitieren
Freeed91 Geschrieben 22. September 2010 Autor Geschrieben 22. September 2010 Danke euch für die Antwort, insbesondere für die sehr ausführliche von dir Klotzkopp^^ wieder etwas dazu gelernt =D Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.