Cのポインタなんですが、

int a[2];
printf("%p %p\n",a,&a);

で同じアドレスが表示されるのはなぜですか?
さらに同じアドレスなのに

*a = 1;

はよくて

*(&a) =1;

は怒られるのはなぜですか?お願いします。