пример с лишними обращениями к памяти, от которых нельзя избавиться
Компилятор не может разместить содержимое *a во временной переменной, поскольку если ячейки *a и *b частично или полностью перекрываются, модификация ячейки *b приводит к неожиданному изменению ячейки *a!
Тоже самое относится и к следующему примеру:
f(char *x, int *dst, int n)
{
int i;
for (i = 0; i < n; i++) *dst += x[i];
}