Strasznie nieczytelny (jeżeli chodzi o działanie) kod. Działa prawidłowo, tj. podajesz "3 3 3" do swap3_ptr przekazujesz po kolei wskaźniki do zmiennych a, b, c, a następnie:
1. Do zmiennej a przypisujesz wartość z c, czyli 3
2. Do zmiennej b przypisujesz wartość z a, czyli 3,
3. Do zmiennej c przypisujesz wartość z b, czyli 3.
Aby zamienić miejscami te obiekty, użyj zmiennej pomocniczej, gdzie będziesz przechowywać wartość każdej liczby i po kolei przypisuj. A najlepiej to użyj tablic i std::rotate.