Pre-Inkrement-Operator ++

Der Pre-Inkrement-Operator erhöht den angegebenen Operanden um eine Einheit und speichert den Wert zurück in den Operanden. Für arithmetische Typen entspricht dies der Addition mit 1. Im Gegensatz zum Post-Increment-Operator steht der Operator ++ VOR dem Operanden und wird ausgeführt, BEVOR der Operand zurückgegeben wird.





5

6
#include <stdio.h>

int main(){
  int a = 5;
  printf("%d\n",  a);
  ++a;
  printf("%d\n",  a);
  return 0;
}

Details

Der Pre-Inkrement-Operator erwartet einen Operanden als lvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist in C ein rvalue: Der Wert des (mittlerweile veränderten) Operanden, der angegeben wurde. In C++ ist der Rückgabewert ein lvalue: Der (mittlerweile veränderte) Operand selbst.

Zwar ist der Pre-Inkrement-Operator für sämtliche arithmetische Typen zulässig, jedoch wird er hauptsächlich bei Integer-Typen und bei Pointern angewendet. Wenn der Pre-Inkrement-Operator auf einen Pointer angewendet wird, so wird der Pointer um eine Typ-Grösse erhöht.




1

2
int main(){
  int a[5] = {1, 2, 3, 4, 5};
  int* b = a;
  printf("%d\n",  *b);
  ++b;
  printf("%d\n",  *b);
  return 0;
}

Wenn der Operand als konstant deklariert ist, so gibt der Compiler einen Fehler wie etwa increment of read-only variable, aus. Anmerkung: Ein (nicht als konstant deklarierter) Pointer, der auf einen konstanten Wert zeigt, kann selbstverständlich inkrementiert werden.

Durch die Addition einer Einheit kann es bei arithmetischen Typen vorkommen, dass ein Overflow passiert, was bei Integer-Typen zu einem Wrap-Around führt


0
unsigned char a = 255;
printf("%d\n",  ++a);

Der Pre-Increment-Operator ist ein Operator, bei welchem der Operand sowohl gelesen, als auch geschrieben wird. Dies kann in gewissen Fällen zu Unbestimmtheiten führen. Genauere Informationen darüber können bei den Sequenz-Punkten nachgelesen werden.

Der Unterschied des Pre-Inkrement-Operators zum Post-Increment-Operator ist, dass der inkrementierte Wert in den Operanden zurückgeschrieben wird, BEVOR der Operand als Rückgabewert verwendet wird, wohingegen der Post-Inkrement-Operator den Operanden zuerst als Rückgabewert auffasst und ihn danach erhöht. Folgendes Beispiel verdeutlicht diesen Unterschied:


11
11
12
int a = 10;
printf("%d\n",  ++a);
printf("%d\n",  a++);
printf("%d\n",  a);