i++ vs ++i in C

Jinku Hu 12 Oktober 2023
  1. Hauptunterschiede zwischen ++i und i++ Notationen in C
  2. Verwendung der Notation ++i als allgemein akzeptierter Stil für Schleifenanweisungen in C
i++ vs ++i 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C Operator