What is the difference between `*a` and `a[0]`?
<p>Given a user-defined type <code>A</code>, and a pointer <code>A* a</code>, what is the difference between <code>*a</code> and <code>a[0]</code>?</p>

<p>(Though <code>*(a+0)</code>/<code>a[0]</code> are defined to be equivalent, the same is not the case for <code>*a</code>/<code>a[0]</code>, where a subtle difference may cause a compilation error in certain circumstances.)</p>
