Post-Inkrement-Operator ++

Der Post-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 Pre-Increment-Operator steht der Operator ++ NACH dem Operanden und wird ausgeführt, NACHDEM der Operand zurückgegeben wurde.





5

6
#include <stdio.h>

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

Details

Der Post-Inkrement-Operator erwartet einen Operanden als lvalue und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue: Der Wert des (vorerst unveränderten) Operanden, der angegeben wurde.

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



1

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

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;
a++;
printf("%d\n",  a);

Der Post-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 Post-Inkrement-Operators zum Pre-Increment-Operator ist, dass der inkrementierte Wert in den Operanden zurückgeschrieben wird, NACHDEM der Operand als Rückgabewert verwendet wurde, wohingegen der Pre-Inkrement-Operator den Operanden zuerst erhöht und ihn danach als Rückgabewert auffasst. Folgendes Beispiel verdeutlicht diesen Unterschied:


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