Erhöhen Sie den Wert von int, auf den der Zeiger zeigt

Lesezeit: 2 Minuten

Benutzeravatar von joels
joels

ich habe ein int Zeiger (dh int *count), dass ich die ganze Zahl erhöhen möchte, auf die gezeigt wird, indem ich die verwende ++ Operator. Ich dachte, ich rufe an:

*count++;

Allerdings bekomme ich eine Build-Warnung “Ausdrucksergebnis unbenutzt”. Ich kann anrufen

*count += 1;

Aber ich würde gerne wissen, wie man die verwendet ++ Betreiber ebenso. Irgendwelche Ideen?

Benutzeravatar von Doug T
Doug T.

Das ++ hat den gleichen Vorrang wie das * und die Assoziativität ist rechts nach links. Sehen hier. Es wird noch komplexer, denn obwohl das ++ mit dem verknüpft wird Zeiger das Inkrement wird nach der Auswertung der Anweisung angewendet.

Die Reihenfolge, in der Dinge passieren, ist:

  1. Nach dem Inkrement wird der nach-inkrementierte Pointer-Adresswert temporär gespeichert
  2. Nicht inkrementierte Zeigeradresse dereferenzieren
  3. Wenden Sie die inkrementierte Zeigeradresse auf count an, count zeigt nun auf die nächste mögliche Speicheradresse für eine Entität ihres Typs.

Sie erhalten die Warnung, weil Sie den dereferenzierten Wert in Schritt 2 nie wirklich verwenden. Wie @Sidarth sagt, benötigen Sie Klammern, um die Reihenfolge der Auswertung zu erzwingen:

 (*ptr)++

  • Ich würde hinzufügen, dass ich diesen Fall immer als schreibe ++*ptr; weil die Priorität eindeutig ist und wenn das Ergebnis nicht verwendet wird, muss nicht zwischen Präinkrement und Postinkrement unterschieden werden.

    – RBerteig

    7. September 2010 um 6:52 Uhr

  • @RBerteig: Es mag für den Compiler eindeutig sein, aber es ist immer noch verwirrend für einen Menschen. Es ist viel besser, Klammern zu verwenden, da dies das Lesen erleichtert.

    – Martin York

    7. September 2010 um 11:37 Uhr

  • @RBerteig: Falls du das behauptest ++*ptr ist leichter zu lesen als ++(*ptr) dann hoffe ich, dass Sie bei Ihrem nächsten Code-Review eine Ohrfeige bekommen.

    – Martin York

    7. September 2010 um 18:56 Uhr


  • Das behaupte ich, und das seit ~25 Jahren. Noch keine Schläge.

    – RBerteig

    7. September 2010 um 22:09 Uhr

  • @RBerteig: Ein halbes Jahrhundert Lisp widerspricht dir. 😉

    – Deniz Dogan

    22. September 2010 um 13:00 Uhr

Benutzeravatar von Sidharth Panwar
Sidharth Panwar

Versuchen Sie es mit (*count)++. *count++ könnte den Zeiger auf die nächste Position erhöhen und dann eine Indirektion verwenden (was unbeabsichtigt ist).

1417860cookie-checkErhöhen Sie den Wert von int, auf den der Zeiger zeigt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy