ポインタの使い方を説明するときによくあるswap関数について。

swap(int *a, int *b)
{
temp = *a;
*a = *b;
*b = temp;
}
どうしてこれで入れ替えることができて、
swap(int a, int b)
{
temp = a;
a = b;
b = temp;
}
これではできないのですか?本にその説明はあるのですが、やっぱりよく分かりません。
上の二つの関数の違いについて詳しく説明していただきたいのですが。