Zum Inhalt springen

Verständnissfehler von Pointer C++


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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.

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...