Swap(int *p1,int *p2) では、int型の変数がメモリ上でどこに格納されているか
っていう情報を引数に与えているので、そこのメモリを直接いじれるんだけど、
Swap2(int a,int b) では、a = xx; b = xx っていう風に値をコピーしてから
a, b を弄っていることになるので、Swap2の呼び出し元では値の変更が得られないわけだ。