Comportamiento definido para expresiones

El estándar C99 dice en $ 6.5.2.

Entre el punto de secuencia anterior y siguiente, un objeto tendrá su valor almacenado modificado como máximo una vez por la evaluación de una expresión. Además,el valor anterior será de solo lectura para determinar el valor que se almacenará.

(énfasis por mí)

Sigue observando que el siguiente ejemplo es válido (lo que parece obvio al principio)

a[i] = i;

ientras que no indica explícitamente quéa yi son

Aunque creo que no, me gustaría saber si este ejemplo cubre el siguiente caso:

int i = 0, *a = &i;
a[i] = i;

Esta voluntadn cambiar el valor dei, pero accede al valor dei para determinar la dirección donde colocar el valor. ¿O es irrelevante que asignemos un valor ai que ya está almacenado eni? Por favor, arroja algo de luz.

Pregunta extra; Qué pasaa[i]++ oa[i] = 1?

Respuestas a la pregunta(4)

Su respuesta a la pregunta