char *p = "ABC";

これはわかるんですが、

char *p;
p = "ABC";

こういう書き方が何故可能なのかがわかりません。
pってアドレスを指しているんですよね?それに直接文字列を代入ってどういうことでしょう。