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
?