1161 Stimmen

Was ist der Unterschied zwischen ++i und i++?

Was ist in C der Unterschied zwischen der Verwendung von ++i y i++ und die im Inkrementierungsblock einer for Schleife?

1422voto

Mark Harrison Punkte 281807
  • ++i erhöht den Wert von i und geben dann den inkrementierten Wert zurück.

     i = 1;
     j = ++i;
     (i is 2, j is 2)
  • i++ erhöht den Wert von i aber den ursprünglichen Wert zurückgeben, der i gehalten, bevor sie inkrementiert wird.

     i = 1;
     j = i++;
     (i is 2, j is 1)

Für eine for Schleife, beides funktioniert. ++i scheint gebräuchlicher zu sein, vielleicht weil es in K&R .

Befolgen Sie auf jeden Fall den Leitfaden "Bevorzugen ++i über i++ " und Sie werden nichts falsch machen.

Es gibt eine Reihe von Kommentaren zur Effizienz der ++i y i++ . In jedem Compiler, der kein Studentenprojekt ist, gibt es keinen Leistungsunterschied. Sie können dies überprüfen, indem Sie sich den generierten Code ansehen, der identisch sein wird.

Die Frage der Effizienz ist interessant... hier ist mein Versuch einer Antwort: Gibt es einen Leistungsunterschied zwischen i++ und ++i in C?

Als @OnFreund merkt, ist es bei einem C++-Objekt anders, da operator++() eine Funktion ist und der Compiler nicht wissen kann, dass er die Erstellung eines temporären Objekts zur Aufnahme des Zwischenwerts wegoptimieren soll.

244voto

Parag Punkte 7436

i++ ist bekannt als Post-Inkrement während ++i heißt Vor-Inkrement.

i++

i++ ist ein Post-Inkrement, weil es inkrementiert i Wert um 1, nachdem der Vorgang abgeschlossen ist.

Sehen wir uns das folgende Beispiel an:

int i = 1, j;
j = i++;

Hier Wert von j = 1 sondern i = 2 . Hier Wert von i wird zugewiesen an j zuerst dann i wird inkrementiert.

++i

++i ist ein Pre-Inkrement, weil es die Zahl der i Wert vor der Operation um 1 erhöht. Das bedeutet j = i; wird ausgeführt, nachdem i++ .

Sehen wir uns das folgende Beispiel an:

int i = 1, j;
j = ++i;

Hier Wert von j = 2 sondern i = 2 . Hier Wert von i wird zugewiesen an j nach dem i Inkrementierung von i . Ähnlich ++i wird ausgeführt, bevor j=i; .

Zu Ihrer Frage die im Inkrementierungsblock einer for-Schleife verwendet werden sollte? Die Antwort lautet: Sie können jedes beliebige Programm verwenden, es spielt keine Rolle. Es wird Ihre for-Schleife gleich oft ausgeführt.

for(i=0; i<5; i++)
   printf("%d ",i);

Und

for(i=0; i<5; ++i)
   printf("%d ",i);

Beide Schleifen erzeugen das gleiche Ergebnis. 0 1 2 3 4 .

Es kommt nur darauf an, wo Sie es verwenden.

for(i = 0; i<5;)
    printf("%d ",++i);

In diesem Fall wird Folgendes ausgegeben 1 2 3 4 5 .

61voto

Shivprasad Koirala Punkte 25296

i++ : In diesem Szenario wird zuerst der Wert zugewiesen und dann wird die Zahl erhöht.

++i : In diesem Szenario wird zuerst die Inkrementierung durchgeführt und dann der Wert zugewiesen

Unten sehen Sie die Visualisierung des Bildes und auch Hier ist ein schönes praktisches Video die das Gleiche zeigt.

enter image description here

55voto

Ryan Fox Punkte 9794

++i inkrementiert den Wert und gibt ihn dann zurück.

i++ gibt den Wert zurück und erhöht ihn dann.

Das ist ein feiner Unterschied.

Für eine for-Schleife, verwenden Sie ++i da sie etwas schneller ist. i++ wird eine zusätzliche Kopie erstellt, die einfach weggeworfen wird.

50voto

Andy Lester Punkte 86147

Bitte machen Sie sich keine Gedanken über die "Effizienz" (Geschwindigkeit, wirklich), welche davon schneller ist. Heutzutage gibt es Compiler, die sich um diese Dinge kümmern. Verwenden Sie diejenige, die für Sie am sinnvollsten ist, je nachdem, welche Ihre Absicht am deutlichsten zeigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X