Возможный дубликат:
Может ли кто-нибудь объяснить это неопределенное поведение (i = i ++ + ++ i, i = i ++ и т. Д.)
значения приращения в printf
У меня есть два двойных массива x
а также y
и целое число i
, Мой вопрос, является ли утверждение:
double res = x[i] * y[i++];
всегда равно утверждению:
double res = x[i] * y[i];
i++;
Возможно ли, что некоторые компиляторы изменятся x[i] * y[i++]
в y[i++] * x[i]
, который, очевидно, дает другой результат?
Нет — x[i] + y[i++]
имеет неопределенное поведение. Вы изменяете значение i
а также используя значение i
без промежуточной точки последовательности, которая дает неопределенное поведение1.
Нет, он не определен, когда происходит приращение.
Код модифицирует i
и использует его значение без промежуточной точки последовательности, поэтому поведение не определено. Определение языка здесь не предъявляет никаких требований.
Нет,
Значение i ++ + i ++ равно не определено в C
а также C++
,
если вы дважды читаете переменную в выражении, в котором вы также пишете, результат не определен. Не делай этого. Другой пример:
v[i] = i++;
Undefined означает, что это зависит от компилятора.
Некоторые компиляторы могут также предупредить вас как неопределенные из-за порядка оценки.
Очень хорошо ссылка для C ++