Почему один и тот же код в двух технологиях ведет себя по-разному
Ниже мой фрагмент кода на C.
void main(){
int x = 7;
x = x++;
printf("%d",x);
}
выход: 8
public static void main(String[] args){
int x = 7;
x = x++;
System.out.println(x);
}
выход: 7
Я не понимаю, почему оба языка дают разные результаты. Я упомянул ниже ссылку Что такое х после "х = х ++"?
3 ответа
В Java после X ++ нет изменений в значении x
х = х ++; равно
int i= x;
x = x + 1;
x = i;
так x
остается таким же, как я
Вы можете прочитать больше здесь: Почему эти конструкции (использующие ++) неопределенного поведения?
Во втором примере присваивание сначала сохраняет значение x, затем устанавливает x в его значение плюс 1 и, наконец, сбрасывает x обратно в его первоначальное значение. Вид:
int temp=x;
x=x+1;
x=temp;
x=x++;
Это дает произвольные результаты в C, в основном в зависимости от компилятора. Прочитать о sequential points
в C. Вы можете обратиться к C Programming
от Dennis ritchie
,