Bence yukarda yazdığın kod access violation verir.
yapmaya çalıştığının doğrusu:
#include <stdio.h>
#include <stdlib.h>
int main(){
int *p,*q,x=4,y=12;
q=&x;
p=&y;
printf("1.Durumda x: %d\n",*q);
printf("1.Durumda y: %d\n",*p);
q=&y;
p=&x;
printf("2.Durumda x: %d\n",*q);
printf("2.Durumda y: %d\n",*p);
system("PAUSE");
return 0;
}olabilir. Ama bu da aslında 2 tane yeni pointer kullanmak *4 = 8byte yer almak demek. 2 tane integer değişken almış gibisin yani. Tek pointer ile de yapılabilir.
Biraz baktım hiç extra yer almadan bence mümkün değil. Ama bir fonksiyon yazıp orada swap işlemlerini pointerlar ile halledip aldığın yeri sisteme iade ederek yapabilirsin. Ayrıca C++ ın STL kütüphanesinde de bir tane swap algoritması var.
referans için:
http://www.cplusplus.com/reference/algorithm/swap/