Стандарт C99 говорит в $ 6.5.2.
Между предыдущей и следующей точкой последовательности у объекта должно быть сохраненное значение. изменяется не более одного раза при вычислении выражения. Кроме того, предыдущее значение должны быть прочитаны только для определения значения, которое будет сохранено .
(выделено мной)
Далее следует отметить, что следующий пример действителен (который поначалу кажется очевидным)
a[i] = i;
Хотя он не указывает явно, что a
и ] я
ар.
Хотя я считаю, что это не так, я хотел бы знать, покрывает ли этот пример следующий случай:
int i = 0, *a = &i;
a[i] = i;
Это не изменит значение i
, но обеспечит доступ значение i
, чтобы определить адрес, по которому следует поместить значение. Или не имеет значения, что мы присваиваем значение i
, которое уже хранится в i
? Пожалуйста, пролей немного света.
Бонусный вопрос; А как насчет a [i] ++
или a [i] = 1
?