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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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