なんでこれ aとbの中身を交換できないの〜?

#include <stdio.h>
main()
{
char a='A',b='B',*ap,*bp;
printf("%c %c\n\n",a,b);
ap = &a;
bp = &b;
a = *bp;
b = *ap;
printf("%c %c",a,b);
}

$ ./pointer.exe
A B

B B

ってなる・・・どうすればいいのでしょう?アドレスを習ったばかりでアドレスを使って交換
する方法を考えています。