int i=0,j=0;
if(i&&j++)
printf ("i = %d, j = %d", i, j);
printf ("i = %d, j = %d", i, j);
&& is shorthand "AND" operator and is doing logical AND operation. As we know an AND GATE outputs a 1 only when both inputs are 1. So, C being smart evaluates first operand and if it is 0 won't evaluate the second and this is called short circuit rule in C.
It would be trivial to think that this is for efficiency reasons. But that is not so correct. Because this rule is actually restricting the start of the execution of the next instruction after '&&' until the result of the previous one is known which can restrict pipeline execution which is very common nowadays. But the real usage of this rule is in ensuring safety of the code like we can detect an error condition as part of the left operand to '&&' and do the actual check in right operand - something like
if (a!= NULL && a-> data > 0)
The short circuit rule also exist for '||' (logical OR) operator. And these two operators are actually sequencing the execution in C and hence part of sequence points.