i++ vs ++i in C
-
Hauptunterschiede zwischen
++i
undi++
Notationen in C -
Verwendung der Notation
++i
als allgemein akzeptierter Stil für Schleifenanweisungen in C
In diesem Artikel werden verschiedene Methoden zur Verwendung von Präfix-Inkrement- vs. Postfix-Inkrement-Operatoren, auch bekannt als i++
vs ++i
, in C erklärt.
Hauptunterschiede zwischen ++i
und i++
Notationen in C
Der grundlegende Teil dieser beiden Notationen ist der unäre Inkrement-Operator ++
, der seinen Operanden, z. B. i
, um 1 erhöht. Der Inkrement-Operator kann vor dem Operanden als Präfix ++i
oder nach dem Operanden als Postfix-Operator - i++
stehen.
Ein etwas ungewöhnliches Verhalten ergibt sich, wenn der mit dem ++
-Operator inkrementierte Variablenwert in einem Ausdruck verwendet wird. In diesem Fall verhalten sich Präfix- und Postfix-Inkremente unterschiedlich. In diesem Fall verhalten sich Präfix- und Postfix-Inkremente unterschiedlich: Der Präfix-Operator inkrementiert seinen Operanden, bevor sein Wert verwendet wird, während der Postfix-Operator den Operanden inkrementiert, nachdem der Wert verwendet wurde.
Folglich wird die Funktion printf
, die den Ausdruck i++
als Argument verwendet, den Wert von i
ausgeben, bevor dieser um eins erhöht wird. Andererseits wird printf
mit dem vorangestellten Inkrement-Operator ++i
den inkrementierten Wert ausgeben, der bei der ersten Iteration 1 sein wird, wie im folgenden Beispielcode gezeigt.
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0, j = 0;
while ((i < 5) && (j < 5)) {
/*
postfix increment, i++
the value of i is read and then incremented
*/
printf("i: %d\t", i++);
/*
prefix increment, ++j
the value of j is incremented and then read
*/
printf("j: %d\n", ++j);
}
printf("At the end they have both equal values:\ni: %d\tj: %d\n\n", i, j);
exit(EXIT_SUCCESS);
}
Ausgabe:
i: 0 j: 1
i: 1 j: 2
i: 2 j: 3
i: 3 j: 4
i: 4 j: 5
At the end they have both equal values:
i: 5 j: 5
Verwendung der Notation ++i
als allgemein akzeptierter Stil für Schleifenanweisungen in C
Postfix- und Präfix-Operatoren haben das gleiche funktionale Verhalten, wenn sie in der for
-Schleifenanweisung verwendet werden. Wenn die beiden for
-Iterationen im folgenden Beispielcode ausgeführt werden, geben sie die Werte von k
identisch aus.
Beachten Sie, dass es mehrere Behauptungen über die bessere Leistungseffizienz der Verwendung von Präfix-Inkrement gegenüber Postfix in den for
-Schleifen gibt, aber der effektive Zeitunterschied wird in den meisten Anwendungen vernachlässigbar sein. Wir können uns angewöhnen, den Präfix-Operator als bevorzugte Methode zu verwenden, da dies ein allgemein akzeptierter Stil ist.
Wenn Sie aber bereits die Postfix-Notation verwenden, sollten Sie bedenken, dass moderne Compiler mit entsprechenden Optimierungsflags ineffiziente Schleifeniterationen automatisch eliminieren.
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int k = 0; k < 5; ++k) {
printf("%d ", k);
}
printf("\n");
for (int k = 0; k < 5; k++) {
printf("%d ", k);
}
printf("\n\n");
exit(EXIT_SUCCESS);
}
Ausgabe:
0 1 2 3 4
0 1 2 3 4
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook