Пожалуйста, помогите мне с объяснением вывода моего кода. В настоящее время я любитель C. Если i++ и i=i+1 - это одно и то же, то почему такая разница в выводе?
#include <stdio.h>
void main()
{
int i=0;
printf("%d %d %d \n",i++,i,i++);
int j=0;
printf("%d %d %d \n",j=j+1,j,j=j+1);
return 0;
}
выход:
1 2 0
2 2 2
Process returned 7 (0x7) execution time : 0.081 s
Press any key to continue.





Чтобы понять логику вашего вывода, вам нужно иметь представление о Pointer и о том, как он работает.
Язык C демонстрирует неопределенное поведение (https://en.wikipedia.org/wiki/Undefined_behavior), при котором вы не можете предсказать, как синтаксис будет работать при выполнении.
i ++ -> увеличивает i, но возвращает предыдущее значение i. ++ i-> увеличивает i и возвращает новое значение i после присваивания. i = i + 1 -> добавляет 1 к i, записывает его в i, а затем возвращает новое значение i после присваивания.
Перейдите по этой ссылке для получения дополнительной информации: https://en.wikipedia.org/wiki/Sequence_point
Исходя из этого принципа, выходные данные можно проанализировать, как показано ниже.
int i=0;
printf("%d %d %d \n",i++,i,i++);
Во-первых, i = 0 запускает выполнение с правой стороны i ++ Сначала он присваивает значение, а указатель хранит 0; тогда произойдет приращение. Итак, i = 1.
На следующем шаге есть только переменная. Итак, указатель не сохраняет значение; он хранит только адрес. Следовательно, i = 1.
Выполнение последнего шага такое же, как и выполнение первого шага. Итак, i = 2.
Теперь он напечатает сохраненное значение. Итак, на выходе 1 2 0.
Теперь давайте проанализируем второй ВЫХОД.
Во втором выводе выражение j = j + 1. Итак, сначала он выполняет все шаги, а затем печатает значение. Итак, второй вывод - 2 2 2.
Надеюсь, теперь вы уловили разницу между i ++ и i = i + 1.