char a[] = "abc";
というのがあって、aは0x10000とする。

aは当然0x10000なのだが、&aは?

&をアドレスを求める演算子と考えれば、aはもともとアドレスなので&aはaの値をそのまま返す。
ということではないのかな?