ものすごく初歩的なことなんですが、疑問に思ったので質問させてください

C言語でint *p;と宣言したあとpに何も代入せずに
scanf("%d", p);などとしてpを使っていいのでしょうか?
それともint a;と宣言してp = &a;としてからではないといけないのでしょうか?