Почему один и тот же код в двух технологиях ведет себя по-разному

Ниже мой фрагмент кода на 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,

Другие вопросы по тегам