In this C-FAQ it is give about sequence point;
The Standard states that;
Between the previous and next sequence point an object shall have
Finally I got an explanation on SO about this point . After reading it and FAQ I concluded that;
1.The last sentence
Furthermore, the prior value shall be accessed only to determine the value to be stored
would be like this;
Furthermore, the prior value of an object shall be accessed only to determine the modified/new value( of same object ) to be stored.
As it is clear by the example
int i = 1, j, a[5];
i = i + 1;
j = i + 1;
a[i] = i;
in case of expression i = i + 1 prior value (which is 1 here) of i (in R.H.S) is accessed to determine the value of i to be stored and this is what the statement
if an object is written to within a full expression, any and all accesses to it within the same expression must be directly involved in the computation of the value to be written .
says.
While in case of j = i + 1 and a[i] = i, the accessed value of i is just value not prior value as no where i is modified in these statements.
2.The second question can be explained as;
In case of expression a[i] = i++ or a[i++] = i, first sentence of above statement
Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression.
get failed as i is modified only once between two consecutive sequence point. And that's why we need second sentence.
Both of these examples are disallowed in C because the prior value of i accessed two times i.e, i++ itself access prior value of i in the expression to modify it and hence other access of prior value / value of i is needless as it is not accessed to determine the modified value to be stored.