int *a,b;
b=100;
a=&b; /*質問1*/
printf("%d\n",b);
printf("%d\n",a); /*質問2*/
printf("%d\n",*a);
printf("%d\n",&a);

質問1:この場合、bのアドレスをaに代入するわけですよね?
質問2:そうするとこの文の実行結果はbのアドレスだと思ったんですが、aのアドレスが出ました。
なぜですか?

たぶん、初歩的なところが理解できていないのだと思うんですが、
1行目で宣言してるaに*がついているということは、
aはポインタ変数なんですよね。ここまではわかります。
で、ポインタ変数ってなんですか???ってことなんです。
メモリ内に*aの領域が作られるわけですよね。その内容にはアドレス以外入らないわけですか?