Vedila così:
&& valuta il secondo operando solo se il primo è vero; restituisce true se entrambi sono veri.
|| valuta il secondo operando solo se il primo è falso; restituisce true se anche solo uno dei due è vero.
Gli operatori di incremento (decremento) prefissi (++x, --x) incrementano (decrementano) la variabile a cui sono applicati e restituiscono il risultato.
Al contrario, gli operatori di incremento (decremento) postfissi (x++, x--) incrementano (decrementano) la variabile a cui sono applicati, ma restituiscono come risultato il suo valore originario (prima che fosse incrementata/decrementata).
... poi ci sarebbe la questione dei sequence points, ma per il momento lasciamo stare...