What are sequence points in C?
The comp.lang.c FAQ explains this quite well.
- at the end of the evaluation of a full expression (a full expression is an expression statement, or any other expression which is not a subexpression within any larger expression);
- at the ||, &&, ?:, and comma operators;
- and at a function call (after the evaluation of all the arguments, and just before the actual call).
The Standard states that
Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
An alternative reference may be The C book.