I'm glad it helped.
Personally I find it easier to think in terms of an operator's effect and the resulting expression's value rather than trying to figure out the particular ordering of events.
Java is more straightforward (I think) in this regard than C. For example the following Java code admits the same sort of analysis (although it probably falls into Norm's category of Code That Should Not Be Written):
import java.util.Arrays;
public class ArrayEg {
public static void main(String[] args) {
int[] arr = new int[5];
int i = 2;
arr[i] = i++;
// arr[i] = ++i;
System.out.println(Arrays.toString(arr));
System.out.println("i=" + i);
}
}
(Predictions of what either form will do is left as an exercise.)
K&R thought that the ambiguous (in C) "arr[i] = i++;" was unspecified. Later standardisers got tough and made it undefined. Java just does what Java always does: works through the two terms left to right, and considers the second term (i++) to do something but also to have a value.