C/C++

Какая разница между преинкрементом и постинкрементом?? Где что предпочтительнее?

Для отдельно стоящих i++ и ++i современный компилятор C/C++ сгенерирует идентичный код.
Разница возникает только при использовании этих операций внутри выражений:
++i работает как ((i += 1), i) - возвращает значение i после увеличения.
i++ работает как ((tmp = i), (i += 1), tmp) - возвращает значение, которое имела переменная i до увеличения.

Предпочтительности не существует - всё зависит от того, что именно надо сделать. В каких-то случаях удобнее использовать пре, в каких-то пост.
Например, классическое копирование C-style строки:
while (*q++ = *p++);

Главное - использовать изменяемую переменную в выражении только один раз - чтобы не нарваться на неопределённое поведение. Например, итоговое значение j в выражении:
j = i++ + i;
непредсказуемо и зависит от особенностей компилятора и даже от уровня оптимизации, установленного при компиляции.

P.S. В компьютерах PDP-11, для которых изначально и создавался язык C, операции *p++ и *--p могли выполняться в разы быстрее, чем *++p и *p--. Да и сами операции ++ и -- были введены для того, чтобы упростить генерацию машинного кода.
Олег Новиков
Олег Новиков
83 768
Лучший ответ
преинкремент увеличивает перед другими вычислениями, постинкремент - после. Что использовать - решайте по обстоятельствам.
Андрей Волынец
Андрей Волынец
93 213
первый пример
int a, x;
a =10; x = 20;
a = ++x;// сперва выполнится операция ++x, х станет равен 21. потом а станет равен 21
ИЛИ эту же запись можно записать более развернуто (если так понятнее)
x = x+1;//или x++;
a = x;

второй пример
int a, x;
a =10; x = 20;
a = x++;// сперва a=20; потом операция x++, х станет равен 211
развернуто
a = x;
x =x+1;
Юра Хоменко
Юра Хоменко
1 900
преинкремент возвращает ссылку, постинкремент возвращает значение