Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Verständnissfehler von Pointer C++

Empfohlene Antworten

Veröffentlicht

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.