sizeof does not evaluate its operand.
  size_t x = sizeof(i++);        // i is not incremented
Except when variable length arrays are involved:
(C99, 6.5.3.4p2) "If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the     operand is not evaluated and the result is an integer constant."
  size_t y = sizeof(int [j++]);  // j is incremented;
(C99, 6.7.5.2p4) "Where a size expression is part of the operand of a sizeof operator and changing the value of the size expression would not affect the result of the operator, it is unspecified whether or not the size expression is evaluated."
 size_t z = sizeof (*(int (*)[k++]) 0);  // k may or may not be incremented
                                         // gcc increments k