Определенное поведение для выражений

Стандарт 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 ?

11
задан R.. 29 January 2012 в 19:48
поделиться