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
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.
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden