LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

Эта строка:

return *p-- += *q--;
семантически эквивалентна такому коду:
int *const tmp_p = p;
int *const tmp_q = q;
p -= 1;
q -= 1;
return *tmp_p += *tmp_q;
*q-- разбирается именно как *(q--), но q как бы «раздваивается» в выражении. Значение указанной переменной меняется, но в выражении используется прошлое значение. В этом вся суть пост-операций. Менять локальные переменные тут толку нет.

Исходная версия xaizek, :

Эта строка:

return *p-- += *q--;
семантически эквивалентна такому коду:
int *const tmp_p = p;
int *const tmp_q = q;
p -= 1;
q -= 1
return *tmp_p += *tmp_q;
*q-- разбирается именно как *(q--), но q как бы «раздваивается» в выражении. Значение указанной переменной меняется, но в выражении используется прошлое значение. В этом вся суть пост-операций. Менять локальные переменные тут толку нет.