>266
ポインタ変数に代入はできるぞ。代入できない変数に意味はないだろう。
char *str;
scanf("%s" str);
はstrに代入するのではなくstrが指している先にchar(の配列)を設定しようと
している(この辺の表現は微妙だけど、、、)
しかしこの場合strはでたらめなところを指しているのででたらめなところに
文字列を設定しようとする。たまたま動くかもしれないし、動かないかもしれない。
char *strの替わりにchar str[1024];とかするととりあえずは動くだろう
(バッファオーバーフローのことは目をつぶる)

int n;
scanf("%d" &n);
この場合に&nが指しているさき(すなわちnであるのだが)に数値を設定する。
この&nと上記のstrが同じような意味合い。