Первый фрагмент меняет местами адреса памяти, которые являются значениями указателей.Поскольку указатели являются локальными копиями, это не влияет на вызывающую функцию.
Перезаписано без утечки памяти:
void Swap_byPointer1(int *x, int *y){
//e.g x = 0xDEADBEEF and y = 0xCAFEBABE;
int *temp=x;
x=y;
y=temp;
//now x = 0xCAFEBABE and y = 0xDEADBEEF
}
Вторая переставляет помехи (объекты, на которые указывают указатели).
Переписано без утечки памяти:
void Swap_byPointer2(int *x, int *y){
//e.g *x = 100 and *y = 200
int temp =*x;
*x=*y;
*y=temp;
//now *x = 200 and *y = 100
//there are now different values at the original memory locations
}
(Указатели могут указывать на динамически размещаемые объекты, но не обязаны. Использование указателя не означает, что должен быть new -allocation. Указатели также могут указывать на объекты с автоматическим временем жизни.)