ええと、&a == &a[0] となるのは、値が同じになるということですが、
Cの文法上から言えば、意味が違います。
aはaddress of array[0]で、a[0]はvalue of array[0]です。偶然に
値が同じになることがあるかもしれませんが、何の意味もありません。
例えば、aが0x1000で、a[0]に0x1000が入っていたら、&a = &a[0] と
なることでしょう。これが同じでも意味がないことはわかりますね?