Was ist in C der Unterschied zwischen der Verwendung von ++i
y i++
und die im Inkrementierungsblock einer for
Schleife?
Antworten
Zu viele Anzeigen?-
++i
erhöht den Wert voni
und geben dann den inkrementierten Wert zurück.i = 1; j = ++i; (i is 2, j is 2)
-
i++
erhöht den Wert voni
aber den ursprünglichen Wert zurückgeben, deri
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.
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
.
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.
- See previous answers
- Weitere Antworten anzeigen